博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程同步技术
阅读量:5029 次
发布时间:2019-06-12

本文共 1844 字,大约阅读时间需要 6 分钟。

线程共享进程的内存空间,打开的文件描述符,全局变量。
当有多个线程同时访问一块内存空间或者一个变量、一个文件描述符,如果不加控制,那么可能会出现意想不到的结果。
 
互斥(mutex)是相互排斥的意思,它是一种锁或者信号灯。
互斥用来保护多个线程共享的数据和结构不会被同时修改,一个互斥锁只能有两个状态
  –locked---加锁
  –unlocked---解锁
加锁后互斥不让其他线程访问。
任何时刻只能有一个线程来掌握某个互斥上锁。
一个线程如果试图在一个已经加锁的互斥上再加锁,这个线程会被挂起,直到加锁的线程释放掉互斥锁为止。
 
 

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

PTHREAD_MUTEX_INITIALIZER是初始化一个快速锁的宏定义。
pthread_mutex_lock用于给mutex加锁。
pthread_mutex_unlock用于给mutex解锁。
 
 
没有线程同步例子
void *func(void *arg){    int *a = (int *)arg;    printf("thread%d start\n", *a);    int i;    for(i=0;i<10;i++)    {        printf("thread%d is running\n", *a);        sleep(1);    }    printf("thread%d end\n", *a);    pthread_exit(NULL);}int main(int arg, char * args[]){    printf("process start\n");    pthread_t thr_d1, thr_d2;    int i[2];    i[0] = 1; i[1] =2;    pthread_create(&thr_d1, NULL, func, &i[0]);    pthread_create(&thr_d2, NULL, func, &i[1]);    pthread_join(thr_d1, NULL);    pthread_join(thr_d2, NULL);    printf("process end\n");    return 0;}

 

使用mutex线程同步例子
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void *func(void *arg){    pthread_mutex_lock(&mutex);    int *a = (int *)arg;    printf("thread%d start\n", *a);    int i;    for(i=0;i<10;i++)    {        printf("thread%d is running\n", *a);        sleep(1);    }    printf("thread%d end\n", *a);    pthread_mutex_unlock(&mutex);    pthread_exit(NULL);}int main(int arg, char * args[]){    printf("process start\n");    pthread_t thr_d1, thr_d2;    int i[2];    i[0] = 1; i[1] =2;    pthread_create(&thr_d1, NULL, func, &i[0]);    pthread_create(&thr_d2, NULL, func, &i[1]);    pthread_join(thr_d1, NULL);    pthread_join(thr_d2, NULL);    printf("process end\n");    return 0;}

 

 

翻译结果
 

转载于:https://www.cnblogs.com/shichuan/p/4496162.html

你可能感兴趣的文章
Java连接RabbitMQ之创建连接
查看>>
开户vim编程之--cscope支持
查看>>
python数据类型图解
查看>>
js获取标准北京时间
查看>>
DZ!NT论坛 3.6.711删除用户各种错解决方案
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>