条件変数を待機している間にスリープするpthreadを持っています。私はそれを実行し続けるために外側whileループでブール値を使用します。私が持っているように見える問題は、スレッドが死んでいないこの変数を変更するときです。 待ちpthreadを強制終了する方法
私は楽器に見ていたし、私はスレッドを開始する場合は、死ぬこと、そして私のスレッド数が2である新しいものを始めることを教えていない私がしたいとき、私は適切にこのスレッドを破壊することができますどのように1?
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;
}
私は答えを固定しましたが、私はランスドッグを外しました。私は具体的には、私は待っているスレッドを殺す方法を知る必要があると思う – dubbeat