【发布时间】:2018-10-08 17:56:53
【问题描述】:
我正在学习使用 pthread、互斥锁和条件变量,但事情并没有按预期进行。
主线程:连续运行,向工作线程发出信号,从 file_A 读取。
工作线程:睡眠直到收到信号,写入 file_A,返回睡眠(应该是可重复的)
所以我知道这里需要一个互斥锁来防止两个线程读取/写入同一个文件。我正在使用条件变量向工作线程发出信号。
但由于某种原因,工作线程只运行一次。我需要重置条件变量还是做其他事情?
工作线程函数:
void* WriteTime(){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&condition, &mutex);
/* Open File, Write to File, Close File */
pthread_mutex_unlock(&mutex);
}
主线程:
pthread_t timeThread;
pthread_create(&timeThread, NULL, &WriteTime, NULL);
while(gameConditionFulfilled == false){
/* Print status, gets user input into line */
/* If user enters "time", wake up WORKER_THREAD */
if(strcmp(line, "time")==0){
pthread_mutex_lock(&mutex);
pthread_cond_signal(&condition);
/* Read from file, print data, close file */
pthread_mutex_unlock(&mutex);
}
}
另外我对上面代码的理解是这样的:
- 工作线程锁定互斥锁。 (在主循环之前启动)
- 工作线程 cond_wait 解锁互斥锁并等待条件。
- 主线程锁定互斥体。
- 主线程发出信号条件。
- 工作线程重新获得互斥锁,写入文件。
- 工作线程解锁互斥锁。
- 主线程重新获得互斥体并将其锁定。
- 主线程读取文件。
- 主线程解锁互斥锁。
- 工作线程重新获得锁定?
行为其实是:
- 主线程从文件中读取
- 工作线程唤醒,写入文件,不再运行
【问题讨论】:
标签: c multithreading pthreads mutex condition-variable