【发布时间】:2018-04-13 06:43:18
【问题描述】:
int main()
{
pthread_t thread;
int a = 0;
while(a == 0)
{
accept(...); //accept a new connection (blocking)
pthread_create(&thread, NULL, threaded_function, &a);
}
pthread_join(...);
return 0;
}
我的目标是保持主线程循环,直到线程返回 a 不等于零。问题是pthread_create 没有返回值。我猜这是因为主线程没有在pthread_join 等待,而是在循环中等待accept。但是如果我加入循环内的线程,循环将不会运行。通过创建另一个线程和另一个线程函数来完成此操作的唯一方法是查看a 的值吗?
【问题讨论】:
-
线程同步是通过条件变量完成的,它们对你有用吗:stackoverflow.com/questions/8901538/…
-
我忘记了条件变量。我将不得不看看我是否可以重组我的代码以使用它们。希望这能解决问题。
-
再看这个,我不知道条件变量是否会起作用,因为
wait会阻塞任何线程,包括需要保持循环的主线程。有什么方法可以使用信号通知循环它可以停止循环并退出? -
我有点困惑。您的主线程卡在接受中。你的目标是根据另一个线程中发生的事情以某种方式打破接受吗?
-
我的主线程卡在接受状态,除非建立新连接,然后它会创建一个新线程,然后循环返回接受并等待。如果在
threaded_function中发生任何将a设置为零的情况,我只想在该线程返回后结束程序(并退出线程)。
标签: c multithreading pthreads