4 ms·
Reference counts are best done using interlocked increment/decrement primitives.
by poizan42 11y ago
Reference counts are best done using interlocked increment/decrement primitives.
- catnaroek 11y agos/interlocked/atomic/
- chrisseaton 11y agoI wonder if there are any compilers which can replace mutex.lock { x++ } With a 'lock xaddl x 1' instruction.
- nly 11y agoIt's conceivable, if you made mutexes compiler/language intrinsic, but as long as you're calling pthread_mutex_lock, the compiler has to assume that that pthread library, which is linked dynamically, is interchangeable, and can do anything it likes to memory. That includes mutating x
- pcwalton 11y agoThat hasn't inhibited optimizations for a long time. Disassemble a call to printf("Hello world") in optimized clang output and look at what it turns into.
- chrisseaton 11y agoYes if the library is covered by a standard just like the language is, then the compiler can make assumptions. Also threads are a language feature in C and C++ now.
- deleted 11y ago[deleted]
- pjmlp 11y agoJava and .NET will do it if you make use of InterlockedIncrement APIs.
- chrisseaton 11y agoBut I think InterlockedIncrement is just 'lock xaddl x 1', so using InterlockedIncrement would be to do it manually. I'm asking if any compiler can take a statement which uses a high level, general purpose lock and increments a variable inside it using conventional language expressions, and convert it to use 'lock xaddl x 1' (perhaps via InterlockedIncrement or whatever other intrinsics you have) instead. I only know Java well, not .NET, but I'm pretty sure no Java compiler does it.
- pjmlp 11y agoAh, I missed the point.
- mike_hearn 11y agoIt's not quite the same thing but recent JVMs can translate synchronised blocks into Intel TSX transactions, which means multiple threads can run inside the lock at once, with rollback and retry if interference is detected at the hardware (cache line) level. So yeah .... almost. But it's fancy and cutting edge stuff.
- deleted 11y ago[deleted]
- jupp0r 11y agoThere ist std::atomic in recent C++ flavors
- chrisseaton 11y agoRight. My question is whether we can translate locks which only reference a single variable, to use something like std::atomic, automatically.