Запись в общий ресурс с мьютексом - PullRequest
0 голосов
/ 24 января 2012

У меня есть список C ++, который обрабатывается несколькими потоками.

Каждый поток создает pthread_mutex_lock в списке, чтобы другие потоки не могли "мешать" списку. Как часть обработки, каждый поток также push_back данных в списке.

Мой вопрос - является ли push_back в списке мьютексов плохой идеей? Является ли мьютекс действительным, пока поток помещает больше данных в список? Большинство документации / примеров, которые я видел на pthread_mutex_lock, делают только «чтение», поэтому мне любопытно узнать, что происходит с тем же потоком, который получил блокировку, пишет на общем ресурсе.

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Пока только этот конкретный поток удерживает блокировку, и никакой другой поток не может взять эту блокировку, запись должна быть в порядке.подумайте, почему может возникнуть проблемаэто было бы проблемой, если бы один поток писал, а другой читал одновременно.Если мяч ваш, вы можете сделать что-нибудь с ним, верно?все меняется, когда они делятся

0 голосов
/ 24 января 2012

Мьютекс должен быть уникальным для всей группы потоков (т. Е. Все потоки должны использовать один и тот же мьютекс).Если вы создаете мьютекс для каждого потока, то вы вообще не безопасны для потоков, потому что каждый поток будет ожидать своего собственного мьютекса и не будет синхронизироваться с остальными.

И да, можно использовать полученный мьютексбезопасно читать и писать.

...