题目:实现两个线程,一个打印奇数,一个打印偶数
思路(1):用c++11的互斥量mutex,条件变量condition_variable.一个全局变量i,控制每个线程获取互斥锁后执行一次,再通过条件变量唤醒另一个等在该锁上的线程,让其执行,即保证两个线程交替运行。
#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <windows.h>
std::mutex data_mutex;
std::condition_variable data_var;
bool flag = true;
int i = 0;
void printA()
{
while (1)
{
Sleep(1000);
unique_lock<mutex> lck(data_mutex);
data_var.wait(lck, [] {return flag; });//只有return flag==true时才不阻塞,上锁成功
cout << "thread: " << this_thread::get_id() << " printf: " << i << endl;
i += 1;
flag = false;
data_var.notify_one();//释放锁,并唤醒等在该锁上的线程
}
}
void printB()
{
while (1)
{
unique_lock<mutex> lck(data_mutex);
data_var.wait(lck, []{retu