线程同步
同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。“同”字从字面上容易理解为一起动作,其实不是,“同”字应是指协同、协助、互相配合。
如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A,A再继续操作。
在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,最多有一个线程访问,以保证数据的完整性。
注意:同一个进程内存的多个线程之间,除了栈内存是独立的,其他资源全部共享。
#include <stdio.h> #include <pthread.h> int num = 0; void* run(void* arg) { for(int i=0; i<1000000; i++) { // 加锁 num++; // 解锁 } } int main(int argc,const char* argv[]) { pthread_t tid1,tid2; pthread_create(&tid1,NULL,run,NULL); pthread_create(&tid2,NULL,run,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); printf("%d\n",num); }
线程A 线程A
读取
运算 读取
回写 运算
回写