Я обычно использую
#pragma omp critical(lock)
{ ... }
Директива, когда мне нужно убедиться, что только один поток выполняет данный кусок кода.
Поэтому я ищу способ реализации общих и эксклюзивных блокировок, используя нечто подобное. У меня есть несколько потоков, которые могут читать или писать переменные. Когда поток пишет, он заблокирует все остальные потоки от чтения или записи. Однако чтение переменной не должно ничего блокировать. Как я могу это сделать?
К сожалению, OpenMP не поддерживает блокировки чтения-записи. Вместо этого вы можете использовать другие библиотеки, такие как Boost, который предлагает shared_lock.
Других решений пока нет …