当前位置 : 主页 > 手机开发 > harmonyos >

mutex 测试程序

来源:互联网 收集:自由互联 发布时间:2023-10-08
这段程序使用了 C++ 11 中的线程库(注意:编译时请不要加 -O 优化选项,否则空循环会被优化掉): g++ -std=c++14 -Wall -pedantic -pthread main.cpp ./a.out // mutex::lock/unlock#include iostream // std::cou


这段程序使用了 C++ 11 中的线程库(注意:编译时请不要加 -O 优化选项,否则空循环会被优化掉):

g++ -std=c++14 -Wall -pedantic -pthread main.cpp && ./a.out



// mutex::lock/unlock
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex

std::mutex g_mtx;           // mutex for critical section
int g_flag = 1;

void thread_run (int id)
{
    g_mtx.lock();
    ++g_flag;
    for(int i = 0; i < 100000000; ++i) {}
    --g_flag;
    std::cout << "thread #" << id << ": " << g_flag << '\n';
    g_mtx.unlock();
}

#define NUM_THREAD 9

int main ()
{
    std::thread threads[NUM_THREAD];
    // spawn NUM_THREAD threads:
    for (int i = 0; i < NUM_THREAD; ++i)
        threads[i] = std::thread(thread_run, i + 1);

    for (auto& th : threads) th.join();

    return 0;
}



不使用 mutex 是这样的:

thread #3: 9
thread #1: 8
thread #2: 7
thread #8: 6
thread #4: 5
thread #9: 4
thread #6: 3
thread #7: 2
thread #5: 1



在上面的输出中,为了不让 stdout 成为竞争资源,我们对 stdout 加锁,以防止出现错乱的输出:

void thread_run (int id)
{
    ++g_flag;
    for(int i = 0; i < 100000000; ++i) {}
    --g_flag;
    g_mtx.lock();
    std::cout << "thread #" << id << ": " << g_flag << '\n';
    g_mtx.unlock();
}



使用 mutex 是这样的:

thread #1: 1
thread #2: 1
thread #3: 1
thread #5: 1
thread #4: 1
thread #6: 1
thread #7: 1
thread #8: 1
thread #9: 1



C++ 11, C++ 14 可以到这里在线编译:

http://coliru.stacked-crooked.com/


上一篇:设置网卡混杂模式
下一篇:没有了
网友评论