怎么看待Linux 多线程中的信号量Semaphore

2023-04-11 12:33:00 多线程 信号量 看待
信号量是一个计数器,用于跟踪资源的使用情况。如果资源可用,则计数器值为正,如果资源不可用,则计数器值为负。当进程试图获取资源时,如果计数器值为正,则进程获取资源并将计数器值减1;如果计数器值为负,则进程等待,直到计数器值为正。当进程释放资源时,它将计数器值加1。 信号量主要用于两类场景: 1)用于控制对共享资源的访问,例如,在内核中有一个全局变量,多个进程要对这个变量进行读写操作,为了避免冲突,可以使用信号量来控制对该变量的访问。 2)用于同步多个进程,例如,一个进程A要等待进程B执行完某个任务之后再执行,这时可以使用信号量来实现同步。 在Linux中,信号量主要有两种类型: 1)互斥信号量(Mutex):互斥信号量主要用于控制对共享资源的访问,它有两个操作:lock和unlock,当一个进程执行lock操作时,如果信号量的值为正,则进程获取资源,将信号量的值减1,如果信号量的值为0,则进程阻塞,直到信号量的值为正;当一个进程执行unlock操作时,如果信号量的值为0,则进程将信号量的值加1。 2)读写信号量(RWLock):读写信号量主要用于控制对共享资源的访问,它有三个操作:read lock、write lock和unlock,当一个进程执行read lock操作时,如果信号量的值为正,则进程获取资源,将信号量的值减1,如果信号量的值为负,则进程阻塞,直到信号量的值为正;当一个进程执行write lock操作时,如果信号量的值为0,则进程获取资源,将信号量的值减1,如果信号量的值为负,则进程阻塞,直到信号量的值为0;当一个进程执行unlock操作时,如果信号量的值为负,则进程将信号量的值加1。

相关文章