Книга: Программирование для 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++).
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- 2.1.3. Функция getopt_long()
- Эффективная работа с временными файлами сортировки
- Группировка по встроенным функциям и UDF
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- 19.1.1. Функция jQuery()
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Функция strcmp( )
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Создание и открытие файла
- Управление файлами занятий