2010-02-10 5 views
2

Если вы не знаете, что такое futex и linuxthreads-0.9, пожалуйста, не отвечайте.Могу ли я смешивать мьютексы на основе futex с мьютексами glibc-2.2 linuxthreads?

Можно ли смешивать в одном мьютексе на основе futex с мьютексом из linuxthreads-0.8 или -0.9 (который использовался во всех glibc < = 2.2 и во всех uClibc)?

Мне нужен межпроцессный мьютекс (pshared one, PTHREAD_PROCESS_SHARED).

Итак, если потоки запускаются и управляются с помощью linuxthreads pthread_manager, будет ли она запутана с помощью sleep и wake на основе futex?

Могу ли я использовать мьютексы на основе futex как для межпроцессорной, так и для межпоточной синхронизации?

ответ

2

Я не понимаю, почему вы не смогли.

Вы не сможете использовать pthreads, очевидно. Вероятно, вы будете использовать библиотеку pthread со старыми мьютексами, и вам понадобится код futex в другой библиотеке.

Вы, очевидно, не можете заблокировать мьютексы linuxthreads и разблокировать его с помощью функции futex, которая никогда не будет работать.

Но если один поток заблокирован в ядре, ожидающем futex, я не вижу, как он отличается от блокировки операции ввода-вывода на диске, а linuxthreads обрабатывает это достаточно хорошо.

+0

Будет ли работать pthread_cancel с асинхронным флагом? – osgx

+1

@osgx: Черт, если я знаю. Я не знаю никого, кто действительно пытался создать такую ​​странную комбинацию кода. –