Можно ли безопасно называть mlock() независимо от выполнения потоков OpenMP или Posix, учитывая, что каждый поток работает в другом регионе виртуальной памяти? Создает ли он системный барьер синхронизации или заставляет все потоки задерживаться каким-то образом?mlock() и Threading
Прошу прощения, если это дубликат; Я был удивлен, когда поисковые запросы Google «mlock openmp»/«mlock thread safety» не сразу ответили на ответ. Ближе всего я смог найти второй ответ Non-blocking mlock(), который, как представляется, указывает, что mlock() может быть вызван из отдельных потоков и не требует каких-либо ограничений синхронизации.
Я не вижу 'mlock()' в списке небезопасных функций здесь: http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html, так что, по-видимому, это должно быть безопасно. – EOF
Спасибо! Означает ли это, что mlock также не вызывает неявной синхронизации между потоками? –
Нет, 'mlock()' не находится в списке асинхронных функций здесь http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html, поэтому он * может * сделать блокировку, если захочет , Такая блокировка будет блокировкой на уровне листа и, таким образом, не сделает функцию нить небезопасной, поскольку она не может участвовать в тупике. – EOF