C++ Статическая функция дублирования
Допустим, у меня есть класс со статической функцией. Конструктор класса выполняет pthread_create, используя статическую функцию в качестве точки входа.
Мой вопрос:
Если бы у меня было несколько экземпляров этого класса, все ли они запускали бы свой собственный поток, используя эту функцию? Есть ли проблемы с этим? И... если бы в самой функции были статические переменные, возникла бы у меня проблема, если бы она не входила повторно?
2 ответа
Если ваш конструктор делает pthread_create()
каждый раз у вас будет столько потоков, сколько и объектов. Если эти потоки обращаются static
переменные в вашем классе, вам нужно убедиться, что доступ к этим переменным защищен мьютексом. (Кроме того, если эти потоки обращаются кstatic
переменные, вы тоже захотите защитить их от других вызывающих до методов вашего объекта).
Один поток на объект, вероятно, слишком много, поэтому вы можете пересмотреть свой дизайн.
Да, все классы начали бы новый поток с той же функцией. Так же, как и при использовании функции, не являющейся членом.
Что касается функционально-статических переменных, это проблема. Поскольку C++ на самом деле ничего не определяет относительно параллелизма, вы, вероятно, смотрите на состояние гонки. Даже при построении этих функционально-статических переменных. До тех пор, пока не будет доступна поддержка C++0x, вам нужно будет искать специфичные для компилятора возможности потоков для вашего ЦП, чтобы вы могли сказать ему, чтобы эти функционально-статические переменные были "локальными для потока". Таким образом, каждый поток получает свою собственную копию.