Koşul değişkenini beklerken uyuyan bir pthread var. Çalışırken tutmak için döngüde bir boole kullanın. Sahip olduğum problem, bu değişkeni değiştirdiğimde ipliğin ölmediğidir.
Enstrümanlara baktım ve eğer bir iş parçacığı başlatırsam ölüme söyle, sonra yeni bir tane başlat, iş parçacığı sayısı 2 değil 1.
İstediğimde bu iş parçacığını doğru şekilde nasıl yok edebilirim?
int worktodo=0;
BOOL runthread=NO;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void *threadfunc(void *parm)
{
int rc;
while(runthread==YES)
{
rc=pthread_mutex_lock(&mutex);
while(!worktodo)
{
printf("thtread blocked\n");
rc=pthread_cond_wait(&cond, &mutex);
}
printf("thtread awake.... doing work\n");
//doing work
worktodo=0;
rc=pthread_mutex_unlock(&mutex);
}
//never reaches here!!
pthread_detach(NULL);
}
void makeThread()
{
pthread_attr_t attr;
int returnVal;
returnVal = pthread_attr_init(&attr);
assert(!returnVal);
runthread=YES;
returnVal = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
assert(!returnVal);
int threadError = pthread_create(&str->thread, &attr, &threadfunc, NULL);
returnVal = pthread_attr_destroy(&attr);
assert(!returnVal);
if (threadError != 0)
{
//Report an error.
}
}
void wakethread()
{
pthread_mutex_lock(&mutex);
worktodo=1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
void killthread
{
runthread=NO;
}