-4
|
Adam Rutledge · 技术社区 · 5 月前 |
![]() |
1
2
一方面,这确实不能保证新线程赢得比赛,另一方面,它确实可能使主线程的延迟时间比它需要的要长得多。
只要使用原子信号变量,这实际上是可行的。C自C99以来就内置了这些功能,但我不确定C++03是否有。
这是不可能的。
最简单的方法可能是使用信号量。 主线程用值0初始化它。启动另一个线程后,主线程尝试递减信号量,直到子线程递增信号量为止(如果它还没有这样做)。 这只需要设置一个同步对象,而不是两个(mutex+cv),而且使用习惯比mutex+cv更简单。 此外,这可以在不改变启动多个线程的情况下进行自适应(互斥体+cv也可以),因为在初始线程重新获得控制权后,信号量已经为下一个周期做好了准备。 示例代码:
当然,为了增强健壮性,您需要检查返回代码并处理错误。代码中包含了一些关于这一点的注释,但需要检查所有提供的函数调用,而不仅仅是带注释的函数调用。 |
![]() |
2
1
如果你必须只使用pthreads,那么pthreads提供了一个 条件变量 API,您可以使用它使父级等待来自子级的信号,例如:
如果您可以使用C++11或更高版本,请使用
|
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 5 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 5 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 5 月前 |
![]() |
András Takács · Python多线程问题 9 月前 |
|
András Takács · Python多线程错误 9 月前 |