170 похожих чатов

А есть какой-нибудь аналог мьютекса, который можно использовать более чем

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

25 ответов

29 просмотров

Семафор?

disba1ancer- Автор вопроса
Dmitriy [Отпуск]
Семафор?

а они есть в стд?

https://en.cppreference.com/w/cpp/thread/condition_variable не подойдет?

disba1ancer- Автор вопроса

Хз, а как им в подобном ключе воспользоваться можно?

тем что, подписываешься на потоки и ждешь, когда все отработают

disba1ancer
Хз, а как им в подобном ключе воспользоваться можн...

кондвары с мутексами равномощны семафорам вполне и в теории можно реализовать одно через другое

Alexander Malkov
тем что, подписываешься на потоки и ждешь, когда в...

Один ждёт многих, или многие ждут одного?

может не захват, а wait?

disba1ancer- Автор вопроса
Kelbon
может не захват, а wait?

Нет не wait именно захват а одном потоке и освобождение в другом, считай что это в корутине и в какой-то точке она переехала на другой поток не отпуская лок

disba1ancer
Нет не wait именно захват а одном потоке и освобож...

ну блин пусть ставит флажок атомарный "занято"

вы хотите странного. C++ ные примитивы синхронизации под капотом работают с тем, что предоставляет OS. для OS владельцем mutex является конкретный тред

Boris Usievich
вы хотите странного. C++ ные примитивы синхронизац...

Вы не очень прав 1) ос не всегда предоставляет примитивы синхронизации, а те что есть не всегда стоит использовать 2) mutex, у которого можно звать unlock не в lock треде, можно реализовать как semaphore с release(1) в unlock и ctor, acquire(1) в lock 3) такой мьютекс бывает полезен, я бы не сказал что это странно, простейший пример fork, сложнее например некий асинхронный код исполнение которого вместе с захваченным для каких то данных ресурсов мьютексом может перемещаться между потоками

1) стоит ли пользоваться такими OC в которых нет mutex? 2) это будет не mutex, а что-то другое. Реализовать можно, да. 3) полезно? где-то да. Но см. выше, это не mutex.

Ну если locked заменить на счётчик то это семафор и есть.

disba1ancer- Автор вопроса
Dmitry Sokolov
Ну если locked заменить на счётчик то это семафор ...

В общем вариант для тех у кого кроме мьютексов ничего нету, но интересный вариант

Boris Usievich
1) стоит ли пользоваться такими OC в которых нет m...

1) например в линуксе нет, я только в винде знаю системные мьютексы

Arelav
Ну не мьютекс

Fast userspace mutex Да ладно

Dmitriy [Отпуск]
Fast userspace mutex Да ладно

Ой ну не надо тут давайте Wait/WakeOnAddress тоже мьютексом называть

Dmitriy [Отпуск]
Fast userspace mutex Да ладно

Он назван плохо, futex — это про всю реализацию мьюеткса вместе с юзерспейсным атомиком Странно сисколл называть юзерспейсным

Arelav
Ой ну не надо тут давайте Wait/WakeOnAddress тоже ...

Тут уже давно придирки к словам пошли, так что я продолжу :) Wait/WakeOnAddress() хранят хэш-таблицу в юзерспейсе - внутри ntdll. Причем, судя по беглому взгляду, (почти) lock-free

а зачем post(1) в конструкторе?

место имение рейверы
а зачем post(1) в конструкторе?

Ну потому что если в семафоре будет 0 после конструктора, то мьютекс у нас не получится так как захватить его будет нельзя

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта