Конструкторы безопасности потоков C ++ g ++ - PullRequest
0 голосов
/ 16 февраля 2010

Дано:

class Foo {
  Foo() {};
};

class Bar {
  static int counter;
  Bar() { ++counter; }
}

Понятно, что Foo :: Foo является поточно-ориентированным, а Bar :: bar - нет.

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

Однако, есть ли дополнительные ошибки, которые мне нужно беспокоиться о конструкторах? То есть кусок кода с мьютексом / блокировками, так что если бы он был в теле функции, он был бы потокобезопасным, но если бы я вставил его в конструктор, основанный на сложности конструкторов C ++, происходят странные вещи, и он больше не является поточно-ориентированным

Спасибо!

Редактировать: вы можете предположить, что я использую g ++.

1 Ответ

1 голос
/ 16 февраля 2010

Я бы избегал любых статических значений в объекте, используемом потоком.

Почему бы не передать значение, необходимое в качестве параметра для конструктора?

Или на самом деле, поместите мьютекс вокруг конструктора в вашем потоке. Я не позволю другим классам отвечать за это.

...