У меня есть приложение, где некоторые контейнеры STL читаются в 3 потоках и написаны в 2. Я знаю, что для многопоточных контейнеров есть TBB, но это не вариант в моем приложении.
Итак, я хочу сделать программу потокобезопасной, используя std:: mutex и мои голые руки. Это простая версия того, что я сделал:
int readers = 0;
std::mutex write;
// One write, no reads.
void write_fun()
{
write.lock();// We lock the resource
while(readers > 0){}// We wait till everyone finishes read.
// DO WRITE
write.unlock();// Release
}
// Multiple reads, no write
void read_fun()
{
// We wait if it is being written.
while(!write.try_lock()){}
write.unlock();
readers++;
// do read
readers--;
}
Это правильный способ сделать это в С++ 11?