- RE: Threads, Max V. Zinal, 22:53 , 08-Мрт-03 (1)
Код странноватый, ну да Бог автору судья. Если доступ к данным массива осуществляют два потока (или более - главное, больше одного) и хотя бы один из потоков производит изменение данных, настоятельно рекомендуется разбить каждую из потоковых функций на набор атомарных операций, а саму атомарность обеспечить столь немилыми Вашему сердцу мьютексами али иными синхронизационными объектами. Современные компиляторы C и процессоры *практически никогда* не обеспечивают атомарность "элементарных" с точки зрения кодера операций, в том числе и целочисленной арифметики. Сие сделано не из вредности, а для сохранения достаточного пространства для всяческих оптимизаций. Так, например, если один поток массив заполняет, а другой "недозаполненный" массив читает, может получиться так, что потоком-"читателем" будет извлечён из массива элемент, которого по "человеческой" логике работы программы там вообще никогда не должно было появиться, но который возник там вследствие частично выполненной операции.
|