C ++ Статическая функция дублирования - PullRequest
3 голосов
/ 25 августа 2011

Допустим, у меня есть класс со статической функцией. Конструктор класса выполняет pthread_create, используя статическую функцию в качестве точки входа.

Мой вопрос:

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

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Если ваш конструктор делает pthread_create() каждый раз, тогда у вас будет столько же потоков, сколько и объектов.Если эти потоки обращаются к static переменным в вашем классе, вам необходимо убедиться, что доступ к этим переменным защищен мьютексом.(Кроме того, если эти потоки обращаются к переменным, отличным от static, вы захотите защитить эти также от других вызывающих методов вашего объекта).

Вероятно, один поток на объектслишком много, так что вы можете пересмотреть свой дизайн.

1 голос
/ 25 августа 2011

Да, все классы начали бы новый поток с той же функцией. Так же, как и при использовании функции, не являющейся членом.

Что касается функционально-статических переменных, , что является проблемой. Поскольку C ++ на самом деле ничего не определяет относительно параллелизма, вы, вероятно, смотрите на состояние гонки. Даже в конструкции этих функционально-статических переменных. До тех пор, пока не будет доступна поддержка C ++ 0x, вам нужно будет искать возможности потоков для конкретного процессора для вашего процессора, чтобы вы могли сказать ему, чтобы эти функционально-статические переменные были «локально потоковыми». Таким образом, каждый поток получает свою собственную копию.

...