Ваш код будет в безопасности, если вы защитите любой доступ к общим переменным с помощью критической секции (замка).
Однако, если переменные правильно выровнены, не хранят ссылки и имеют размер не более указателя, вы можете избежать использования блокировки.
Например, если у вас есть целое число, содержащее число, вам не нужно будет использовать блокировку. Нить для письма можно безопасно модифицировать, а нить для чтения никогда не порвется. Если у вас было несколько потоков записи, вам, вероятно, потребуется использовать блокировку или функцию блокировки.
Если ваша переменная является ссылкой, вам, вероятно, потребуется использовать блокировку. Если у вас есть несколько переменных, которые образуют составную переменную, вам снова понадобится блокировка.
Важность выравнивания заключается в том, что если переменная смещена, запись переменной может быть не атомарной. Переменная может быть записана в двух частях. Таким образом, поток чтения может прочитать переменную в частично обновленном состоянии. Всегда выравнивайте переменные. Если вы воздержитесь от упаковки записей и классов, ваши переменные будут выровнены.
В конечном счете, я не могу точно сказать, безопасен ли ваш код, потому что вы его не показали. Описание кода — это только то, что нужно. Вы действительно должны опубликовать свой код для такого вопроса.
person
David Heffernan
schedule
11.05.2013