Википедия
Потоковая безопасность — это концепция программирования, применимая к многопоточным программам. Код потокобезопасен, если он функционирует корректно при использовании его из нескольких потоков одновременно. В частности, он должен обеспечивать корректный доступ нескольких потоков к разделяемым данным.
В общем случае потоковая безопасность сложно устанавливается. Но существует несколько источников выявления нарушений потоковой безопасности:
- доступ к глобальным переменным или динамической памяти ;
- выделение/освобождение ресурсов, имеющих глобальные ограничения ( файлы , процессы и др.);
- неявный доступ через ссылки и указатели ;
- побочный эффект функций.
Есть несколько способов достигнуть потоковой безопасности:
Реентерабельность : Написание кода в таком стиле, что он может быть частично выполнен одним потоком, затем другим, и продолжен первым. Это требует сохранения состояния в локальных переменных, обычно на стеке, вместо глобальных или статических переменных .Линеаризуемость : Написание кода процедур таким образом, что результат любого их параллельного выполнения эквивалентен некоторому последовательному выполнению.