C++11 thread

#include <thread>
#include <iostream>
#include <mutex>
using namespace std;

int k = 200;
mutex mt;
void f1(){
	while (true){
		mt.lock();
		if (k > 0){
			k--;
			cout << "f1:" << k << endl;
		}else{
		// 如果中途退出,一定要释放锁,防止出现独占式情况
			mt.unlock();
			break;
		}
		mt.unlock();	
	}
	
	
}

void f2(){

	while (true){	
		mt.lock();
		if (k > 0){
			k--;
			cout << "f2:" << k << endl;
		}else{
		// 如果中途退出,一定要释放锁,防止出现独占式情况
			mt.unlock();
			break;
		}
		mt.unlock();
	}
	

}
int main(){
	thread t1(f1);
	thread t2(f2);
	t1.join();
	t2.join();
	return 0;
}

  • join()
      join用于阻塞当前线程等待thread执行完执行体。一般用于多线程之间进行同步。对于不具备分离属性的线程必须要join,否则会导致terminal。我觉得白话文就是join 是让当前主线程等待所有的子线程执行完,才能退出。

  • joinable()
      成员函数joinable用于检测thread是否需要join。joinable为false的情况有3种:1.thread调用过detach; 2.thread已经join过; 3.thread为空。

posted @ 2019-01-18 17:46  老耗子  阅读(84)  评论(0编辑  收藏  举报