조잡한 스레드 인터럽트를 구현하려고합니다.이 코드 섹션에는 뮤텍스가 필요합니까?
'interruptRequested'변수가 꽤 자주 검사되고 있습니다. 운영 체제 클래스에서 우리는 기아에 대해 배웠습니다 - 여기 또는 비슷한 상황에서 가능합니까? 필자는 예제 프로그램이 실행될 때 예상대로 작동하지만 우연히 될 수 있음을 알고 있습니다.
사실//Compile with -lpthread
#include <iostream>
#include <signal.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
using namespace std;
bool interruptRequested;
pthread_mutex_t spamMutex;
void *Spam(void *);
int main(int argc, char *argv[])
{
pthread_t tid;
interruptRequested = false;
unsigned long long int timeStarted = time(NULL);
pthread_create(&tid, NULL, Spam, NULL);
unsigned long long int difference = 0;
while (true)
{
pthread_yield();
difference = (time(NULL) - timeStarted);
if (difference >= 5)//Spam the terminal for 5 seconds
{
//while (pthread_mutex_trylock(&spamMutex));
interruptRequested = true;
//pthread_mutex_unlock(&spamMutex);
break;
}
}
return 0;
}
void *Spam (void *arg)
{
while (true)
{
//while (pthread_mutex_trylock(&spamMutex));
if (interruptRequested == true)
{
//pthread_mutex_unlock(&spamMutex);
break;
}
//pthread_mutex_unlock(&spamMutex);
cout << "I'm an ugly elf" << endl;
pthread_yield();
}
interruptRequested = false;
pthread_exit (0);
}
, 실제 코드에서 나는 시차 방식을 사용하고 있지 않다 : 여기
내가 뭘하는지의 단순화 된 버전입니다. 내 프로그램은 서버에서 메시지를 수신하고 그 시점에서 스레드를 인터럽트해야합니다.
+1 예, 휘발성 속성을 사용하는 것이 좋습니다. – fabrizioM