代理ip自动提取网站源码,手机软件界面设计,wordpress编辑器没有16px,离婚证app制作软件这是多线程的最后一篇文章。
std::promise
promise 的作用很简单#xff0c;在一个线程t1中保存一个类型typename T的值#xff0c;可供相绑定的std::future对象在另一线程t2中获取。事实上#xff0c;它与future基本是成对出现的。来看下面的例子#xff1a; //声明一个…这是多线程的最后一篇文章。
std::promise
promise 的作用很简单在一个线程t1中保存一个类型typename T的值可供相绑定的std::future对象在另一线程t2中获取。事实上它与future基本是成对出现的。来看下面的例子 //声明一个std::promise对象pr1其保存的值类型为intpromiseint pr1;//声明一个std::future对象fu1并通过std::promise的get_future()函数与pr1绑定futureint fu1 pr1.get_future();promise和future之间是通过get_future()绑定的对于一个promise而言只能调用一次get_future()。
之后创建两个线程线程1为promise赋值线程2使用promise的值。
void Thread_Fun1(promiseint p)
{int iVal 233;cout 传入数据(int) iVal endl;//传入数据iValp.set_value(iVal);
}void Thread_Fun2(futureint f)
{//阻塞函数直到收到相关联的std::promise对象传入的数据auto iVal f.get(); //iVal 233cout 收到数据(int) iVal endl;
}//创建一个线程t1将函数Thread_Fun1及对象pr1放在线程里面执行thread t1(Thread_Fun1, ref(pr1));//创建一个线程t2将函数Thread_Fun2及对象fu1放在线程里面执行thread t2(Thread_Fun2, ref(fu1));//阻塞至线程结束t1.join();t2.join();如果你对操作系统有一定的了解你会发现这有点像“生产者-消费者”问题promise相当于生产者future相当于消费者。
当然不能说promise的唯一意义就是让thread可以通过future传递一个返回值回来反正有万能的引用。鉴于我公司的项目里对这个用得比较少我也无法解释更多的含义了。
线程对自身的控制
thread所有针对自身的控制都在命名空间this_thread里我这里介绍两个
sleep_for
每次我学这种函数我都有种无语的感觉。只是因为C语言的sleep()与平台有关C就要搞一个另外的sleep_for()出来然后参数还是特别离谱的duraction然后优点还是能保证底层以及多平台的兼容性… …唉。
说回正题sleep_for()可以让线程暂停一段时间。比如刚才的函数就可以这么用
void Thread_Fun1(promiseint p)
{this_thread::sleep_for(chrono::seconds(10));int iVal 233;cout 传入数据(int) iVal endl;//传入数据iValp.set_value(iVal);
}yield
yield()的作用是当前线程“放弃”执行让操作系统调度另一线程继续执行。当然不是永久放弃而是暂时交出时间片供操作系统调度过一会会还回来的。
比如你在等待某个操作完成循环while会使得操作系统没办法分资源给等待的线程出现死锁。这时就可以用yield()暂时交出控制权。
while(!isDone()); // 错误的写法有可能死锁
while(!isDone()) yield(); // 正确的写法暂时交出控制权