在下面的代码:易失性和多线程?
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int ready = 0;
wait()
{
int i;
do
{
usleep(1000);
pthead_mutex_lock(&mutex);
i = ready;
pthread_mutex_unlock(&mutex);
} while (i == 0);
printf("Finished\n");
}
signal()
{
pthead_mutex_lock(&mutex);
ready = 1;
pthread_mutex_unlock(&mutex);
}
我们产卵两个线程,我们调用wait在一个线程,然后调用另一个信号我们也让编译器优化积极。
现在代码的行为会如预期的那样,还是我们需要做好准备工作以使其发挥作用?不同的编译器和库会以不同的方式处理它们吗
编辑:我希望可能有围绕互斥体函数,会阻止优化本身或编译器通常不优化轮回函数调用。
注意:我还没有编译和测试代码,当我有机会时会这样做。
请参阅我的编辑。 – doron 2010-07-30 15:11:48
它不便携式。该编译指示可能会阻止编译器优化,但编译器可以做的任何优化原则上也可以通过芯片组,CPU,内存控制器等来完成。 – 2011-08-30 23:14:18