Linux8-互斥锁、信号量

一、前情回顾

void perror(const char *s);
功能:
参数:

二、资源竞争

1.多线程访问临界资源时存在资源竞争(存在资源竞争、造成数据错乱)

临界资源:多个线程可以同时操作的资源空间(全局变量、共享内存)

解决:

        互斥:多个线程访问临界资源时,进行排他性访问。(同一时刻只允许一个线程对该临界资源进行访问)

        互斥锁:解决多线程访问临界资源时,存在资源竞争。

        1.创建           pthread_mutex_t mutex

        2.初始化        pthread_mutex_init

        3.加锁            int pthread_mutex_lock

        4.解锁            int pthread_mutex_unlock

        5.销毁锁        int pthread_mutex_destroy

int pthread_mutex_init(pthread_mutex_t *restrict muxt,const pthread_mutexattr_t *restrict attr);
功能:初始化一个互斥锁

参数:
restrict mutex:锁对象地址

restrict attr:锁的属性(NULL)

返回值:

成功:0

失败:非零

上锁          int pthread_mutex_lock( pthreaad_mutex_t *mutex)
 解锁         int pthread_mutex_unlock( pthreaad_mutex_t *mutex)
 销毁锁      int pthread_mutex_destroy( pthreaad_mutex_t *mutex)
参数:所创建的锁地址

返回值:

成功:0

失败:非零


2.同步与异步   

        异步:多任务各自执行各自的任务,互相之间没有直接干扰。

        同步:多个任务中的某些步骤按照先后顺序执行。

2.1线程间同步:

多个线程在某个任务执行过程中具有先后顺序

2.1.1信号量(sem):

实现线程间同步(使用同步方式访问临界资源,可以达到互斥的效果)

2.1.2信号量使用:

1.定义信号量对像          sem_t sem

2.初始化                         sem_init()

3.申请信号量:P操作        

4.释放信号量:V操作        

5.销毁                                

int sem_init(sem_t *sem,int pshared,unsigned int value)
功能:初始化一个信号量

参数:

sem:信号量的地址

pshared:同一个进程间的线程间 0//不同进程间非0

value:初始化的资源数

返回值:

成功 0

失败 -1

申请

  int sem_wait( sem_t *sem)
当申请的信号量资源数>0,sem_wait表示申请到了该信号量,信号量资源数-1)
当申请的信号量资源数=0,sem_wait阻塞等待信号量的释放
 释放  int sem_post( sem_t *sem)
该信号量的资源数自动+1
 销毁  int sem_destroy( sem_t *sem)

三、进程通信

同一主机进程间通信:

3.1无名管道

用于同一主机下,具有亲缘关系的进程间通信。

1.创建一个管道并打开 int pipe(int pipefd[2]);(pipefd[0],管道的读端,pipefd[1]管道的写端) 

2.读管道    read();

3.写管道    write();

4.关闭管道 close();

5.删除管道 remove();

3.2有名管道

用于同一主机下,具有任意关系的进程间通信。

3.3信号

3.4共享队列

3.5消息队列

3.6信号灯

不同主机进程间通信:

3.7网络套接字

四、补充

*memset(void *s,int c,size_t n);(将内存清成指定字节)

     字符串首地址,修改成的字符,清几个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值