Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. Zero-choice alternative

Zero-choice alternative

Scheduled Pinned Locked Moved The Weird and The Wonderful
csharp
24 Posts 14 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Thomas Weller 0

    Not totally sure about that without checking, but: Isn't an if statement atomic, at least such a simple one? I.E.: Is uncertain allowed to change at all between the two boolean checks, may it be volatile or not?

    www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
    Programmer - an organism that turns coffee into software.

    L Offline
    L Offline
    Lutoslaw
    wrote on last edited by
    #14

    uncertain = uncertian

    I'm affraid that Jessica could change a volatile value of the uncertian even during the '=' symbol.

    Greetings - Gajatko Portable.NET is part of DotGNU, a project to build a complete Free Software replacement for .NET - a system that truly belongs to the developers.

    T 1 Reply Last reply
    0
    • T Thomas Weller 0

      Not totally sure about that without checking, but: Isn't an if statement atomic, at least such a simple one? I.E.: Is uncertain allowed to change at all between the two boolean checks, may it be volatile or not?

      www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
      Programmer - an organism that turns coffee into software.

      S Offline
      S Offline
      supercat9
      wrote on last edited by
      #15

      If "foo" is volatile, the statement "if (foo == foo) bar();" must read the value of foo exactly twice and compare the two values read. If "foo" happens to be an address in normal RAM, the two reads would be most likely read the same data unless an interrupt or task switch happened to occur between them (not terribly likely). Not everything in a processor-based system is RAM, however. When a typical flash memory chip is performing a write cycle, consecutive read operations are guaranteed to return different data. If the generated code for the above 'if' statement didn't read 'foo' twice, the 'if' test would succeed even while the flash was still being written.

      T L 2 Replies Last reply
      0
      • L Lutoslaw

        uncertain = uncertian

        I'm affraid that Jessica could change a volatile value of the uncertian even during the '=' symbol.

        Greetings - Gajatko Portable.NET is part of DotGNU, a project to build a complete Free Software replacement for .NET - a system that truly belongs to the developers.

        T Offline
        T Offline
        Thomas Weller 0
        wrote on last edited by
        #16

        So there's absolutely nothing you can do - this code IS dangerous and stays dangerous :). -- Or is it Jessica who is dangerous... ;)

        www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
        Programmer - an organism that turns coffee into software.

        1 Reply Last reply
        0
        • S supercat9

          If "foo" is volatile, the statement "if (foo == foo) bar();" must read the value of foo exactly twice and compare the two values read. If "foo" happens to be an address in normal RAM, the two reads would be most likely read the same data unless an interrupt or task switch happened to occur between them (not terribly likely). Not everything in a processor-based system is RAM, however. When a typical flash memory chip is performing a write cycle, consecutive read operations are guaranteed to return different data. If the generated code for the above 'if' statement didn't read 'foo' twice, the 'if' test would succeed even while the flash was still being written.

          T Offline
          T Offline
          Thomas Weller 0
          wrote on last edited by
          #17

          Thanks for that - wasn't totally sure about it from the top of my head...

          www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
          Programmer - an organism that turns coffee into software.

          1 Reply Last reply
          0
          • T Thomas Weller 0

            Not totally sure about that without checking, but: Isn't an if statement atomic, at least such a simple one? I.E.: Is uncertain allowed to change at all between the two boolean checks, may it be volatile or not?

            www.thomas-weller.de Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
            Programmer - an organism that turns coffee into software.

            C Offline
            C Offline
            cpkilekofp
            wrote on last edited by
            #18

            No, an if statement is not guaranteed to be atomic as it can be decomposed into multiple binary instructions, and a task switch can occur between any of those instructions unless the compiler designates the entire sequence as a critical section.

            1 Reply Last reply
            0
            • C ClementsDan

              I've seriously used code like that to check for NaN.

              B Offline
              B Offline
              Bram Fokke
              wrote on last edited by
              #19

              Wouldn't float.IsNaN(x) be a more readable way to achieve that?

              M 1 Reply Last reply
              0
              • P PIEBALDconsult

                More like a second chance. Yesterday I somehow wound up writing if ( x != x )..., I enjoyed the warning I got: warning CS1718: Comparison made to same variable; did you mean to compare something else?

                K Offline
                K Offline
                KarstenK
                wrote on last edited by
                #20

                That is a good test for a custom "!=" operator X|

                Greetings from Germany

                1 Reply Last reply
                0
                • S supercat9

                  If action is volatile, it would be possible for the second test to succeed even if the first fails. Indeed, if it's a memory-mapped mapped register, such behavior might even be expected.

                  P Offline
                  P Offline
                  peterchen
                  wrote on last edited by
                  #21

                  Reminds me of that little DOS / Win console classic to wait for a keystroke: if (!getch()) getch(); :cool: yes, this is the right way to do it

                  Burning Chrome ^ | Linkify!| FoldWithUs! | sighist

                  1 Reply Last reply
                  0
                  • B Bram Fokke

                    Wouldn't float.IsNaN(x) be a more readable way to achieve that?

                    M Offline
                    M Offline
                    Megidolaon
                    wrote on last edited by
                    #22

                    Only decimal numbers have NaN as static class member (at least ni C#), natural numbers like int or short don't have it. Though if something is NaN, you would get an error the moment it's assigned to a natural number variable.

                    1 Reply Last reply
                    0
                    • S supercat9

                      If "foo" is volatile, the statement "if (foo == foo) bar();" must read the value of foo exactly twice and compare the two values read. If "foo" happens to be an address in normal RAM, the two reads would be most likely read the same data unless an interrupt or task switch happened to occur between them (not terribly likely). Not everything in a processor-based system is RAM, however. When a typical flash memory chip is performing a write cycle, consecutive read operations are guaranteed to return different data. If the generated code for the above 'if' statement didn't read 'foo' twice, the 'if' test would succeed even while the flash was still being written.

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #23

                      hey, if would b gr8 if u could explain wat u mean by variable being volatile

                      Ravie Busie Coding is my birth-right and bugs are part of feature my code has!

                      S 1 Reply Last reply
                      0
                      • L Lost User

                        hey, if would b gr8 if u could explain wat u mean by variable being volatile

                        Ravie Busie Coding is my birth-right and bugs are part of feature my code has!

                        S Offline
                        S Offline
                        supercat9
                        wrote on last edited by
                        #24

                        hey, if would b gr8 if u could explain wat u mean by variable being volatile This is not a place for programming questions, but in this context, a 'volatile' variable is one that is marked with the 'volatile' keyword. If a variable is declared volatile, expressions involving that variable may not be optimized. If 'foo' were not volatile, the code (assume foo, bar1, bar2, and bar3 are of type int):

                        foo = bar1;
                        bar2 = foo*25;
                        bar3 = foo*25;
                        foo = 8;

                        could be safely replaced with:

                        bar3 = bar2 = bar1 * 25;
                        foo = 8;

                        and indeed some compilers would make such a replacement. If 'foo' were volatile, however, all four of the original statements would have to be performed as-is, in sequence.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups