我正在使用旋转锁来保护非常小的关键部分。 争用很less发生,所以自旋锁比普通的互斥锁更合适。 我现在的代码如下,并假定x86和GCC: volatile int exclusion = 0; void lock() { while (__sync_lock_test_and_set(&exclusion, 1)) { // Do nothing. This GCC builtin instruction // ensures memory barrier. } } void unlock() { __sync_synchronize(); // Memory barrier. exclusion = 0; } 所以我想知道: 这段代码是否正确? 它是否正确确保相互排斥? 它是否适用于所有x86操作系统? 它也可以在x86_64上运行吗? 在所有操作系统上? 这是最佳的吗? 我已经看到使用比较和交换的自旋锁实现,但我不知道哪个更好。 根据GCCprimefacesbuild立的文档( http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html )还有__sync_lock_release 。 我不是内存障碍方面的专家,所以我不确定是否可以使用这个来代替__sync_synchronize 。 我正在优化的情况下,没有争议。 我根本不在意争论。 […]
我总是想知道他们是什么样的人:每当我听到他们的声音,未来的飞轮式装置的图像就会在我脑海中跳舞(滚动)。 他们是什么?