Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency 计数初始化为n的信号量_Concurrency_Synchronization_Operating System_Semaphore_Locks - Fatal编程技术网

Concurrency 计数初始化为n的信号量

Concurrency 计数初始化为n的信号量,concurrency,synchronization,operating-system,semaphore,locks,Concurrency,Synchronization,Operating System,Semaphore,Locks,如果一个计数信号量被初始化为n,这是否意味着n个进程可以同时运行其关键部分?本质上是的 请记住,计数信号量只有在递减后计数为负数时才会阻塞。因此,信号量可以在阻塞之前减少n次。由于所有减量必须与增量匹配,因此,假设每个进程只减量一次信号量(这是目前最常见的情况),那么是的,n个进程将能够同时运行其关键部分。否 如果n>0,则意味着在请求上下文阻塞之前,计数信号可以被精确地提取n次,并等待计数信号变为可用(假设在此期间没有人给出) 如果nYes,如果您已经将信号量初始化为n,那么sem\u wai

如果一个计数信号量被初始化为n,这是否意味着n个进程可以同时运行其关键部分?

本质上是的

请记住,计数信号量只有在递减后计数为负数时才会阻塞。因此,信号量可以在阻塞之前减少n次。由于所有减量必须与增量匹配,因此,假设每个进程只减量一次信号量(这是目前最常见的情况),那么是的,n个进程将能够同时运行其关键部分。

如果n>0,则意味着在请求上下文阻塞之前,计数信号可以被精确地提取n次,并等待计数信号变为可用(假设在此期间没有人给出)


如果nYes,如果您已经将信号量初始化为n,那么sem\u wait将不会阻塞任何线程,除非它已经被调用n次,那么只有信号量变为-ve,并且这就是调用sem\u wait的任何线程阻塞的时候


对于关键部分,您必须使用二进制信号量或互斥量。

这不是违背了信号量的目的吗?互斥?还是计数信号量总是被初始化为1?信号量的目的是允许n次采集,因此根据定义,不,它不会违背目的。如果您想要一个互斥信号量,那么它会定义一个信号量(1)
或计数信号量总是应该初始化为1吗?
仅当需要互斥时