目的:
- 多个线程同时运行
- 指定线程在其余线程执行完毕后继续执行
原理:
- 利用变量进行同步,变量的操作需要具有线程安全
- 使用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);
}
}
网友评论