在下面的代碼:易失性和多線程?
#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