这里写自定义目录标题
使用两个模块(线程/协程/其他)交替打印序列,一个模块打印数字, 另外一个模块打印字母, 最终效果如下:
12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mux;
std::condition_variable number_condition;
std::condition_variable char_condition;
bool is_number = true;
int i = 1;
char c = 'A';
void printNumber()
{
while (true)
{
std::unique_lock<std::mutex> lock(mux);
if (!is_number)
{
//如果打印数字标志位为否,则线程等待
number_condition.wait(lock);
}
std::cout << i;
i++;
std::cout << i << std::endl;
i++;
is_number = false;
std::cout << "数字打印结束,通知进行字符打印..." << std::endl;
// 通知打印字符串的线程可以进行打印了
char_condition.notify_one();
}
}
void printChar()
{
while (c <= 'Z')
{
std::unique_lock<std::mutex> lock(mux);
if (is_number)
{
// 如果打印数字标志位为是,则打印字符线程挂起等待
char_condition.wait(lock);
}
std::cout << c;
c++;
std::cout << c << std::endl;
c++;
is_number = true;
std::cout << "字符打印结束,通知进行数字打印..." << std::endl;
number_condition.notify_one();
}
}
int main()
{
//定义两个线程分别进行打印数字和字符的操作
std::thread t1(printNumber);
std::thread t2(printChar);
t1.join();
t2.join();
return 0;
}