Мне нужно решить проблему синхронизации, используя PThreads.
В некоторый момент в коде одному потоку нужно знать количество потоков, заблокированных на семафоре (как определено в sempahore.h
).
Когда я взглянул на справочные страницы sem_getvalue(sem_t *s, int *sval)
, было указано, что возвращаемое значение sval
в Linux равно 0
, но может иметь другую семантику в соответствии с POSIX, то есть абсолютное значение sval
устанавливается на количество потоков, заблокированных на семафоре s
.
Поэтому я ищу вариант компиляции Linux, чтобы сделать возможной эту альтернативную семантику.
Я попытался смоделировать число потоков, заблокированных на определенном семафоре, отслеживая целочисленную переменную каждый раз, когда поток выполняет sem_wait()
на этом семафоре.
Но меня интересует правильность этого метода, особенно для условий гонки.