C ++ 11线程事件:std :: future vs std :: condition_variable

时间:2017-02-17 08:34:09

标签: multithreading c++11 promise condition-variable

我正在编写一个网络测试程序。 这个想法是有两个线程。客户端和服务器。 我想在2个线程之间添加一些事件。

Basicly

  1. 主线程运行服务器并为客户端创建新线程。

  2. 服务器线程等待客户端连接。

  3. 客户端线程发送一些数据并通知服务器线程。

  4. 客户端线程等待。

  5. 服务器读取数据。检查数据是否完整,并通知客户端线程发送更多数据。

  6. 循环重复多次,但服务器不知道多少次。

  7. 发送完所有数据后,客户端线程会通知服务器线程退出其循环。服务器线程(主线程加入客户端线程。)

  8. 我使用全局std :: condition_variable和全局变量实现了它,并且它可以工作。我正在编写多个这些测试函数。每个测试函数都执行我上面描述的但具有不同数据的功能。

    以下是我的一些问题:

    1. 我找到了std :: promise和std :: future。我喜欢它等待在另一个线程中设置值的事实。我可以使用它代替std :: condition_variable吗?通常,在等待设置变量时,使用一种方法而不是另一种方法的用例是什么?差异,优点/缺点?

    2. 在每个测试函数中本地声明std :: condition_variable和变量并将引用传递给线程而不是使用全局变量会更好吗?出于某种原因,我不喜欢使用全局变量。什么是更好的做法?

    3. 如果你确定它会在主线程之前结束,你是否需要加入一个线程?我的客户端线程在完成发送时通知服务器线程(主线程)并将退出,所以服务器线程确实在等待客户端线程退出。我还需要在主线程中加入吗?

0 个答案:

没有答案