: 우리는 두 개의 스레드를 생성휘발성 및 멀티 스레딩? 다음 코드에서
#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);
}
우리는 우리는 또한 적극적으로 최적화 컴파일러를 얻을 하나 개의 스레드에서 대기를 호출 한 다음 다른에서 신호를 호출합니다.
이제 코드가 예상대로 동작할까요? 아니면 정상적으로 작동하려면 준비가 필요합니까? 다른 컴파일러와 라이브러리가 다르게 처리합니까?
편집 : 나는 그 주위에 최적화를 방지하거나 컴파일러가 일반적으로 라운드 함수 호출을 최적화하지 못하는 뮤텍스 함수가있을 수 있기를 바랍니다.
참고 : 아직 코드를 컴파일하고 테스트하지 않았으므로 기회가있을 때 수행 할 것입니다.
제 편집을 참조하십시오. – doron
휴대용이 아닙니다. pragma는 컴파일러 최적화를 방해 할 수 있지만, 컴파일러가 수행 할 수있는 최적화는 원칙적으로 칩셋, CPU, 메모리 컨트롤러 등에 의해 수행 될 수 있습니다. –