Советы по написанию поточно-ориентированного кода UNIX? - PullRequest
2 голосов
/ 27 июня 2010

Каковы правила написания поточно-ориентированного кода UNIX на C и C ++?

Я знаю только несколько:

  • Не используйте глобальные переменные
  • Не используйте статическое локальное хранилище

Какие еще есть?

Ответы [ 4 ]

6 голосов
/ 27 июня 2010

Самое простое, что нужно сделать, это прочитать немного. Следующий список содержит некоторые материалы, которые стоит посмотреть и изучить.

  1. Потратьте время на чтение Базовая спецификация открытой группы , в частности, Общая информация и подраздел для потоков . Это базовая информация для многопоточности в большинстве систем ООН * X.
  2. Узнать разницу между мьютексом и семафором
  3. Поймите, что все, что передается ДОЛЖНО быть защищено. Это относится к глобальным переменным, static переменным и любой разделяемой динамически выделяемой памяти.
  4. Заменить глобальные флаги состояния условными переменными . Они реализованы с использованием pthread_cond_init и связанных функций.

Как только вы поймете основы, узнайте об общих проблемах, чтобы вы могли их идентифицировать , когда они возникают:

2 голосов
/ 27 июня 2010

Это действительно сводится к общему состоянию, глобальные и статические локальные являются примерами общего состояния. Если вы не разделяете состояние, у вас не будет проблем. Другие примеры общего состояния включают запись нескольких потоков в файл или сокет.

Любым общим ресурсом необходимо будет правильно управлять - это может означать создание чего-либо защищенного мьютексом, открытие другого файла или интеллектуальную сериализацию запросов.

Если два потока читают и пишут из одной и той же структуры, вам нужно будет обработать этот случай.

1 голос
/ 27 июня 2010

Остерегайтесь функций sem_t, они могут возвращать незавершенные при прерываниях, IO, SIGCHLD и т. Д. Если они вам нужны, обязательно всегда фиксируйте этот случай.

Функции

pthread_mut_t и pthread_cond_t безопасны по отношению к EINTR.

0 голосов
/ 29 июля 2010

Хорошую открытую книгу о параллелизме в целом можно найти здесь: Маленькая книга семафоров

В ней представлены различные проблемы, которые решаются поэтапно, и включены решения общих проблем параллелизмакак голодание, условия гонки и т. д. Это не зависит от языка, но содержит короткие главы о реализации решений в C с помощью Pthread-Library или Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...