2013-11-17 3 views
1

Я пытаюсь решить проблему, подобную обеденным философам. Как я могу заблокировать два ресурса в один момент? Блокировка одного ресурса, а затем ожидание другого - не самый лучший вариант.Как заблокировать два ресурса сразу?

Я могу использовать только переменные условий и мьютексы, но единственным решением является «не самый лучший».

Я пишу в С.

+1

Это хорошо читать http://docs.oracle.com/cd/E19455-01/806-5257/sync-12/index.html –

+0

Используйте шаблон 'std :: lock', который блокирует произвольное количество мьютексов без блокировки. –

+0

@KerrekSB Я пишу в C. – pmichna

ответ

-3

std::lock может принимать два аргумента, два unique_locks. Называйте их как с `станд :: defer_lock» аргумент:

std::unique_lock<std::mutex> lock_one(mutex_one, std::defer_lock); 
std::unique_lock<std::mutex> lock_two(mutex_two, std::defer_lock); 
std::lock(lock_one, lock_two);` 
+0

Я пишу на C, а не на C++. – pmichna

+0

Мы поверим вам, если вы будете говорить об этом достаточно :) –

+0

Downvoted? Вы только добавили «Я пишу на C» после того, как двое из нас ответили на C++. –

Смежные вопросы