Я работал над небольшим примером в песочнице, чтобы помочь мне понять, как использовать rwlocks.Все кажется довольно простым, однако я время от времени получаю тупики в своем примере и не понимаю, почему это происходит.
Я поместил пример кода на pastebin, потому что это больше, чем несколько строккода: http://pastebin.org/359203
Если вы запустите пример.Когда он в конечном итоге блокируется, последние три оператора печати будут в одном из двух случаев:
one:
th4: request lock
th3: request lock
th4: locked
two:
th3: request lock
th4: request lock
th3: locked
На основе выходных данных.Мне кажется, что существует возможный тупик от второго вызова функции блокировки, будь то блокировка чтения или блокировка записи.Но поскольку один из потоков имеет блокировку, а тот же поток - то, что вызывает вторую функцию блокировки, почему он блокируется?Еще более интересно, что в этом маленьком случае вызывает тупик?
Обратите внимание, что я работаю в Mac OS X и это серьезно надуманный пример.Это песочница от чего-то другого, над чем я работаю и хотел убедиться, что я правильно понял эту часть.