Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Объекты синхронизации и рекурсивный вход


Автор: Mephisto 11.8.2010, 17:20
Какие объекты синхронизации поддерживают рекурсивный вход одним потоком: семафор, мьютекс, фьютекс, спинлок?

Автор: MAKCim 11.8.2010, 21:53
в теории 1 и 2
на практике реализацию чего вы имеете в виду: pthread, ядро, ...?

Автор: Mephisto 11.8.2010, 23:30
Цитата(MAKCim @  11.8.2010,  22:53 Найти цитируемый пост)
в теории 1 и 2

Хм, я почему-то думал что только фьютексы как раз обладают подобной возможностью.
Цитата(MAKCim @  11.8.2010,  22:53 Найти цитируемый пост)
на практике реализацию чего вы имеете в виду: pthread, ядро, ...?

Ну, насколько я понимаю варианты 1,2 и 4 pthread должны опираться на реализацию ядра, только фьютексы имеют реализацию повыше и только в крайнем случае к ядру обращаются. Или я не прав?

Автор: MAKCim 12.8.2010, 10:30
Цитата(Mephisto @  11.8.2010,  23:30 Найти цитируемый пост)
Ну, насколько я понимаю варианты 1,2 и 4 pthread должны опираться на реализацию ядра

реализация ядра - futex()
man 2 futex

все остальное - user-level атомарные операции, которые в случаях 1, 2 используют futex() для ожидания
спинлоки используют замкнутый _цикл_ для ожидания

непосредственно futex() как отдельная концепция используется для синхронизации разного рода, в частности pthread_join

Автор: Mephisto 12.8.2010, 23:11
MAKCim, почитал еще немного, вроде пронял. Спасибо.

А в Windows семафоры так же устроены, или есть существенные различия?

Автор: MAKCim 13.8.2010, 08:33
Mephisto, 
не в курсе

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)