У меня есть std::map<int, object*>
, который мне нужен для доступа (чтения и записи) из разных тем. Конечно, я могу просто использовать один критический раздел для чтения и записи, но он будет иметь огромное влияние на производительность, потому что у меня есть много find()
звонков (несколько тысяч в секунду) и значительно меньше записей (как правило, одна вставка и один стирать при создании и уничтожении потока).потокобезопасное использование std :: map
Поэтому для записи нужно использовать CriticalSection
и проверять только, если другой поток выполняет операцию записи перед чтением. Но как? Я нашел решения для C++ 11 и boost, но я использую Visual Studio 2008 (из-за проблем с совместимостью).
Может ли кто-нибудь дать мне пример или объяснение того, как это сделать? Благодаря!
В Windows API для Vista или более поздних версий есть также блокировки чтения/записи. https://msdn.microsoft.com/en-us/library/windows/desktop/aa904937(v=vs.85).aspx –