今天小编要和大家分享的是嵌入式技术相关信息,接下来我将从Linux下多线程编程的互斥与同步是怎么回事,代码编程绍仔_英语自我简绍这几个方面来介绍。

嵌入式技术相关技术文章Linux下多线程编程的互斥与同步是怎么回事代码编程绍仔_英语自我简绍

嵌入式技术相关技术文章Linux下多线程编程的互斥与同步是怎么回事

本文将说明如何使用信号量实现线程之间的互斥与同步。互斥锁只有0,1两中状态,适合于线程对共享资源的独占访问,很多时候每个资源可以同时被有限的线程访问,此时互斥锁将无法满足;条件变量同步也同样存在这种问题。信号量实际是一种非负整型计数器,可以很好的控制线程之间资源访问,互斥锁能实现的功能,信号量同样可以。

信号量控制资源共享主要是PV原语操作, PV原语是对整数计数器信号量sem的操作。一次 P操作使 sem减一,而一次 V操作使sem 加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量sem 的值大于等于零时,该进程(或线程)具有公共资源的访问权限;相反,当信号量 sem的值小于零时,该进程(或线程)就将阻塞直到信号量 sem的值大于等于 0 为止。

Linux下多线程编程的互斥与同步是怎么回事

Linux 实现了POSIX 的无名信号量,主要用于线程间的互斥同步。这里主要介绍几个常见函数。

· sem_init用于创建一个信号量,并能初始化它的值。

· sem_wait和sem_trywait相当于P操作,它们都能将信号量的值减一,两者的区别在 于若信号量小于零时,sem_wait将会阻塞进程,而 sem_trywait则会立即返回。

· sem_post相当于V操作,它将信号量的值加一同时发出信号唤醒等待的进程。

· sem_getvalue用于得到信号量的值。

· sem_destroy用于删除信号量。

所需头文件 #i nclude

函数原型 int sem_init(sem_t *sem,int pshared,unsigned int value)

sem:信号量

pshared:决定信号量能否在几个进程间共享。由于目前Linux还没有实现进程间共享信号量,所以这个值只能够取0

value:信号量初始化值

函数返回值 成功:0 ,出错:-1

所需头文件 #i nclude

函数原型

int sem_wait(sem_t *sem)

int sem_trywait(sem_t *sem)

int sem_post(sem_t *sem)

int sem_getvalue(sem_t *sem)

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查