您的位置:首页 > 运维架构 > Linux

Linux之线程:同步与互斥

2016-09-26 18:05 267 查看
首先我们来说一下同步是什么:    

            其实所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。
    也就是针对于同一个需要解决的问题,但是我们需要多个执行流进行同时操作,所以我们就需要对这个任务进行分工计算,最终得到一个最终结果,相当于树的根部求值。唯一不同的就是线程/进程之间进行访问操作,总有访问到相同的数据性,如果当前的计算机的访问问题存在不一致的原子性,就会出现我们资源上的抢占回访错误或者出现死锁问题,这个我们后面提。

说简单了就是:同步就是多个线程按照约定顺序共同完成一个任务。也就是线程控制与创建。

然后我们看一段代码:
[code=cpp;toolbar:false">#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NLOOP 5000

static int g_count = 0;

void* read_write_mem(void *_val)
{
int val = 0;
int i = 0;
for (;i<NLOOP;++i)
{
val = g_count ;
printf("pthread id is :%x,count is :%d\n",(unsigned long )pthread_self(),g_count);
g_count = val +1;
}
return NULL;
}

int main()
{
pthread_t tid1;
pthread_t tid2;
pthread_create(&tid1,NULL,read_write_mem,NULL);
pthread_create(&tid2,NULL,read_write_mem,NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
printf("count final val is :%d\n",g_count);
return 0;
}#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);//阻塞式
int pthread_mutex_trylock(pthread_mutex_t *mutex);//非阻塞式
int pthread_mutex_unlock(pthread_mutex_t *mutex);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: