编写一个程序,开启3个线程,这3个线程的ID分别是A,B,C

编写一个程序,开启3个线程,这3个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC……,依次递推。

c++

3个回答

参考:
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;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问