• C/C++多线程


    一、pthread_once使相关代码只执行一次

    这个函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。

    #include <pthread.h>
    int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
    #include <iostream>
    #include <pthread.h>
    #include <unistd.h>
    
    using namespace std;
    
    pthread_once_t once = PTHREAD_ONCE_INIT;
    
    void once_run(void) {
        cout<<"once_run in thread "<<(unsigned int )pthread_self()<<endl;
    }
    
    void * child1(void * arg)
    {
        pthread_t tid =pthread_self();
        cout<<"thread "<<(unsigned int )tid<<" enter"<<endl;
        pthread_once(&once,once_run);
        cout<<"thread "<<tid<<" return"<<endl;
    }
    
    
    void * child2(void * arg)
    {
        pthread_t tid =pthread_self();
        cout<<"thread "<<(unsigned int )tid<<" enter"<<endl;
        pthread_once(&once,once_run);
        cout<<"thread "<<tid<<" return"<<endl;
    }
    
    int main(void)
    {
        pthread_t tid1,tid2;
        cout<<"main thread enter"<<endl;
        pthread_create(&tid1,NULL,child1,NULL);
        pthread_create(&tid2,NULL,child2,NULL);
        sleep(10);
        cout<<"main thread exit"<<endl;
        return 0;
    
    }
    
    /*
    main thread enter
    thread 4144080640 enter
    once_run in thread 4144080640
    thread 139667890611968 return
    thread 4152473344 enter
    thread 139667899004672 return
    main thread exit
    
    */
    View Code
  • 相关阅读:
    ngRoute AngularJs自带的路由
    AngularJs $resource 高大上的数据交互
    AngularJs filter 过滤器
    eBPF监控工具bcc系列一启航
    [转载] kprobe原理解析(一)
    c++通过CMake实现debug开关
    如何使用fio模拟线上环境
    汇编学习pushl, popl
    block:cfq 学习02
    阻抗匹配详细讲解(以前的转贴)
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10799216.html
Copyright © 2020-2023  润新知