编写一个程序,开启3个线程,这3个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC……,依次递推。
参考:
https://blog.csdn.net/lilien1010/article/details/8118735
注意,上面这个程序只能在windows上运行
https://blog.csdn.net/wyhang0/article/details/38358149
这个程序比较复杂,但是应该可以在linux上运行。
#include <iostream>
#include <thread>
#include <mutex>
#include <windows.h>
using namespace std;
using namespace this_thread;
mutex lockon;
void prinID()
{
for(int i=0;i<10;i++)
{
lockon.lock();//同步数据锁,避免数据错乱
cout<<get_id();
Sleep(10);//让CPU有时间反应,否则会错乱
lockon.unlock();//解除锁定
}
}
int main()
{
thread t1(prinID);
thread t2(prinID);
thread t3(prinID);
//将线程加入主线程,主线程会等待其他线程结束
t1.join();
t2.join();
t3.join();
return 0;
}
有限的知识下只能做到这样了(比较慢)
#include <iostream>
#include <thread>
using namespace std;
using namespace this_thread;
int th_num=3,times=10,active_num=0;
int nextnum(int element, int Begin_num, int End_num)
{
element++;
if(element>=Begin_num&&element<=End_num)
return element;
else
return 0;
}
void prinID(int ser_num)
{
for(int i=0; i<times; i++)
{
while(active_num!=ser_num);
char ID='A'+ser_num;
cout<<ID;
active_num=nextnum(active_num, 0, th_num-1);
}
}
int main()
{
thread threads[th_num];
for(int i=0; i<th_num; i++)
threads[i]=thread(prinID,i);
for(int i=0; i<th_num; i++)
threads[i].join();
return 0;
}