多线程:超时阻塞等待

时间:2011-08-24 21:38:11

标签: c++ multithreading

我正在使用TinyThread ++来对项目中的线程功能进行简洁的平台独立控制。我刚刚遇到这样一种情况:我希望在不挂断CPU的情况下进行响应同步消息传递,同时允许线程在空闲时继续进行一些工作。当然,我可以简单地产生第三个线程来做“其他工作”,但我所缺少的是一个条件变量wait(int ms)类型函数,而不是已经很好用的wait()。我的想法是,我希望它只能阻塞最多ms毫秒,因此它可以超时并定期执行某些操作(在此期间线程不会主动等待条件变量)。我的想法是,尽管让线程坐在那里等待突袭任何传入的消息是很好的,但如果我给它执行一些任务,只执行50微秒,我只需每次运行一次第二,它绝对不应该让我做另一个线程(和消息队列和其他资源)来完成它。

这有什么意义吗?我正在寻找关于如何实现这一点的建议。我希望在TinyThread代码中添加几行可以为我提供这个功能。

1 个答案:

答案 0 :(得分:1)

wait function的源代码并不是很复杂,因此所需的修改看起来很简单:

  • linux实现依赖于pthread_cond_wait函数 这可以简单地改为pthread_cond_timedwait 功能。如果我忘记了任何细节,请仔细阅读文档。

  • 在窗户方面,它还有一点点 复杂,我不是Windows上多线程的专家。那 如果有_wait函数的定时版本(我很确定有), 改变应该工作得很好。再次,在进行任何修改之前,请仔细阅读文档。

现在,在您进行这些修改之前,我不认为您要做的是一个好主意。使用线程的主要优点是在概念上分离不同的任务。尝试在单个线程中执行多项操作有点像尝试在单个函数中执行多项操作:它使设计复杂化并使调试更加困难。因此,除非创建新线程的开销太大或除非生成的代码仍然简单易懂,否则我会将其拆分为多个线程。

最后,我感觉你可能没有意识到条件变量可以虚假地返回(返回时没有任何人做过任何信号或在条件仍为假时返回)。所以为了以防万一,我建议您查看usage examples,并确保理解为什么会出现这些循环。