Семафоры "защищают" разделяемую память, только если все программы, использующие ее, сотрудничают. То есть это позволяет программе, которая хочет играть хорошо, не портить общие объекты.
Это, однако, не гарантирует, что вредоносная программа сможет подключиться и повредить общие структуры, если захочет. Я не знаю каких-либо связанных с безопасностью функций в стандарте C ++, поэтому я бы посоветовал прибегнуть к средствам, специфичным для ОС.
Это означает, что вам может потребоваться разный код для Linux, Windows, Mac и т. Д. (В зависимости от того, какие у вас целевые платформы), может быть, даже другой код для разных версий ОС.