美文网首页
多线程同步

多线程同步

作者: 圣地亚哥_SVIP | 来源:发表于2020-05-19 14:38 被阅读0次

    目的:

    • 多个线程同时运行
    • 指定线程在其余线程执行完毕后继续执行

    原理:

    • 利用变量进行同步,变量的操作需要具有线程安全
    • 使用std::atomic的原子性操作进行同步
    • 只有当一变量变成指定值时,在运行最后的线程
    • 如下,atomic<int> ++、load、store均是原子操作

    代码如下:

    
    
    #include <atomic>
    #include <iostream>
    #include <pthread.h>
    
    std::atomic<int> test;
    
    void* thread1(void* t){
    
        pthread_t tid = pthread_self();
        printf("Thread Before: %d\n",tid);
        test++;
        return NULL;
    }
    
    void* thread2(void* t){
      
      while(test.load( std::memory_order_acquire ) < 3);
      printf("Thread End\n");
      return NULL;
    
    }
    
    int main(int argc,char *argv[]){
      
      pthread_t threads[4];
      test.store(0,std::memory_order_release);
      pthread_create(&threads[0],NULL,thread2,NULL);
      for (int i=1;i<4;++i){
        int r = pthread_create(&threads[i],NULL,thread1,NULL);
      }
    
      for (int i=0;i<4;++i){
        pthread_join(threads[i],NULL);
      }
    
    }
    

    相关文章

      网友评论

          本文标题:多线程同步

          本文链接:https://www.haomeiwen.com/subject/zxrbohtx.html