sem_init (…): Для чего pshared параметр?

Я использую VMware Fusion на Mac для выполнения Windows Server 2003, Visual Studio и всех моих требований IIS.

у меня нет проблем, но мой MacBook Pro действительно имеет 4 ГБ RAM с 2 ГБ выделенными WMVare, когда это работает.

11
задан Frank V 18 August 2009 в 02:59
поделиться

2 ответа

Версия GLIBC sem_init (что вы получите, если man sem_init в Linux) говорит следующее:

«Аргумент pshared указывает, должен ли этот семафор быть разделяется между потоками процесса или между процессами. "

Итак pshared является логическим значением: на практике значимые значения, передаваемые ему, являются false ( 0 ) и true ( 1 ), хотя любое значение, отличное от 0, будет рассматриваться как истинное. Если вы передадите ему 0, вы получите семафор, к которому могут обращаться другие потоки. в том же процессе - по сути, внутрипроцессная блокировка. Вы можете использовать это как мьютекс, или вы можете использовать его в более общем плане для свойств семафора, подсчитывающих ресурсы. Возможно, если бы pthreads поддерживали семафорный API, вам не понадобилось бы это свойство sem_init , но семафоры в Unix предшествуют потокам pthread на некоторое время.

Было бы лучше, если бы логическое значение было каким-то перечислением (например, SEM_PROCESS_PRIVATE vs SEM_PROCESS_SHARED ), потому что тогда у вас не было бы этого вопроса, но семафоры POSIX - это довольно старый API, поскольку все это происходит.

13
ответ дан 3 December 2019 в 08:05
поделиться

Я бы сказал, что нет существенной разницы между значениями s 1, 2, 5 и так далее относительно общего параметра общего . Вероятно, так написано, потому что, когда API был впервые создан, C не имел логических типов.

1
ответ дан 3 December 2019 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: