У меня есть структура, содержащая два элемента.
struct MyStruct {
int first_element_;
std::string second_element_;
}
Структура распределяется между потоками и поэтому требует блокировки. Мой вариант использования требует блокировки доступа к структуре whole вместо просто определенного элемента c, например:
// start of Thread 1's routine
<Thread 1 "locks" struct>
<Thread 1 gets first_element_>
<Thread 1 sets second_elements_>
<Thread 2 wants to access struct -> blocks>
<Thread 1 sets first_element_>
// end of Thread 1's routine
<Thread 1 releases lock>
<Thread 2 reads/sets ....>
Какой самый элегантный способ сделать это?
РЕДАКТИРОВАТЬ: Чтобы уточнить, в основном этот вопрос о том, как принудительно использовать любой поток, используя эту структуру для блокировки мьютекса (хранится где угодно) в начале своей процедуры и разблокировать мьютекс в конце его.
EDIT2: Мое текущее (безобразное) решение состоит в том, чтобы создать мьютекс внутри MyStruct и заблокировать этот мьютекс в начале процедуры каждого потока, которая использует MyStruct. Однако, если один поток «забывает» заблокировать этот мьютекс, у меня возникают проблемы с синхронизацией.