Size: a a a

2021 October 31

Dv

Dr. Friedrich von Ne... in codingteam
Хотя, конечно, хочется поменьше всяких специальных режимов.
источник

c

codingteam@cjr in codingteam
Minoru
хм. С другой стороны, спец. режим понадёжнее «семафора», потому что если тред упадёт, то со спец.режимом у нас просто останется неудалённый элемент, wait() на котором завершится мгновенно. А вот с семафорами в такой ситуации мой главный тред зависнет навсегда
источник

Dv

Dr. Friedrich von Ne... in codingteam
В принципе, смотри чо можно сделать.

Можно сделать семафор и счётчик. Семафор при работающем пуле всегда равен единичке.

При завершении каждый тред уменьшает счётчик (атомарно). Если счётчик упал до нуля — тогда последний дёргает семафор.

Мейнтред даёт им сигнал на завершение и ждёт семафора.
источник

c

codingteam@cjr in codingteam
Minoru
звучит как rwlock
источник

Dv

Dr. Friedrich von Ne... in codingteam
Серьёзно?
источник

c

codingteam@cjr in codingteam
Minoru
ну, rwlock вроде именно так и реализуется: счётчик читателей и семафор, позволяющий писателю продолжать
источник

c

codingteam@cjr in codingteam
Minoru
я вчера это у Таненбаума прочитал! *гордо выпячивает грудь*
источник

Dv

Dr. Friedrich von Ne... in codingteam
Кажись, это non-upgradeable rwlock?
источник

Dv

Dr. Friedrich von Ne... in codingteam
А, у тредов есть некий JoinHandle, который прям в точности сообщает состояние треда. Этот момент я упустил. Можно с его помощью сделать полущ, да.
источник

c

codingteam@cjr in codingteam
Minoru
да, non-upgradeable. И, к тому же, с ним читатели могут заморить писателя голодом
источник

c

codingteam@cjr in codingteam
Minoru
но идея интересная. А что можно сделать с JoinHandle? Учти, что там нет try_join(), то есть нельзя просто глянуть, завершился тред или нет
источник

c

codingteam@cjr in codingteam
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ну вот я пока думаю
источник

Dv

Dr. Friedrich von Ne... in codingteam
А вообще, в Расте это норм ситуация, что тред помер, а процесс не завершился?
источник

Dv

Dr. Friedrich von Ne... in codingteam
Мне казалось, там вообще на любой чих дёргают panic, не?
источник

Dv

Dr. Friedrich von Ne... in codingteam
Алсо, ну вот включил ты у пула режим самоуничтожения. Берёшь массив этих джойнеров, копируешь себе (атомарно!)

Потом по ним циклом идёшь и ждёшь каждого.

В этом случае тебе не нужно держать лок во время терминации.
источник

c

codingteam@cjr in codingteam
Minoru
дёргают. Если паникует главный тред, то процесс завершается, а если не главный — то не завершается
источник

Dv

Dr. Friedrich von Ne... in codingteam
На время копирования нужен лок, а потом уже не нужен. И не будет дедлока.
источник

c

codingteam@cjr in codingteam
Minoru
о, действительно!
источник

Dv

Dr. Friedrich von Ne... in codingteam
Главное — чтобы треды не плодились после того, как пул вступил в режим самоуничтожения
источник