Книга: Программирование для Linux. Профессиональный подход

Листинг 4.3. Исправленная функция main() из файла thread-create.c

Листинг 4.3. Исправленная функция main() из файла thread-create.c

int main() {
 pthread_t thread1_id;
 pthread_t thread2_id;
 struct char_print_parms thread1_args;
 struct char_print_parms thread2_args;
 /* Создание нового потока, отображающего 30000
    символов 'x'. */
 thread1_args.character = 'x';
 thread1_args.count = 30000;
 pthread_create(&thread1_id, NULL, &char_print, &thread1_args);
 /* Создание нового потока, отображающего
    20000 символов 'o'. */
 thread2_args.character = 'o';
 thread2_args.count = 20000;
 pthread_create(&thread2_id, NULL, &char_print, &thread2_args);
 /* Убеждаемся, что завершился первый поток. */
 pthread_join(thread1_id, NULL);
 /* Убеждаемся, что завершился второй поток. */
 pthread_join(thread2_id, NULL);
 /* Теперь можно спокойно завершать работу. */
 return 0;
}

Мораль сей басни такова: убедитесь, что любые данные, переданные потоку по ссылке, не удаляются (даже другим потоком) до тех пор, пока поток не завершит свою работу с ними. Это относится как к локальным переменным, удаляемым автоматически при выходе за пределы своей области видимости, так и к динамическим переменным, удаляемым с помощью функции free() (или оператора delete в C++).

Оглавление книги


Генерация: 1.173. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз