pthread更新一个公共变量

时间:2012-07-07 22:17:30

标签: android

在我的问题中,我使用pthread_create()创建一个pthread,比如myThread。

它们共享主线程的公共变量“done”,告诉myThread停止从套接字读取。

在我的pthread中,我有一个循环:

// done is a common variable
while (!done && socket->read(&buffer) == OK) {
    // do something....
}

有时候,我想告诉myThread停止从套接字读取,所以我这样做:

done = true;
  void *test;
    pthread_join(myThread, &test);

这会导致竞争条件吗?也就是说myThread看不到我的主线程在读取调用阻塞之前更新了'done'的值?

1 个答案:

答案 0 :(得分:0)

在一个线程中编写变量并在另一个线程中读取变量需要同步(例如互斥锁)以避免竞争条件。

如果这是一个真正的套接字而不是一个奇怪的对象,请考虑调用shutdown()来拆除连接并唤醒被阻塞的线程,同时保持文件描述符有效,请参阅Wake up thread blocked on accept() call。一旦读取失败,myThread就会锁定互斥锁并检查done变量。

其他方法包括在套接字上调用poll()和用于传递关闭消息的管道。