Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Вопрос касательно QThread


Автор: Lindemann66 8.9.2011, 10:47
Всем привет!

Всего 1 маленький вопрос

Есть класс, который обеспечивает работу (не важно, какую) - допустим, Worker

Есть много потоков - QThread

Есть ли что-то плохое в том, если 
создать 1 указатель *worker
и передать его во все потоки через конструктор, а затем вызывать у него операции?

То есть, по сути, 1 объект на все потоки?
Или же лучше в каждом потоке создать свой *worker, и использовать его?

Но это ведь не оптимально, так как можно в 1 месте создать, и использовать везде?

В-общем, такой вопрос

Буду благодарен за любые ответы.

Автор: azesmcar 8.9.2011, 10:57
Lindemann66

Все очень сильно зависит от того, что именно будет делать твой класс Worker. Доступ к общим данным из нескольких потоков необходимо синхронизировать, так-как параллельная модификация объекта может привести к неопределенному результату. Если операции класса Worker затрагивают общие данные, то сам класс должен быть потокобезопасным, т.е. должен обеспечивать необходимую синхронизацию. Синхронизацию конечно можно обеспечить извне (т.е. при вызове самих функций из потоков), но в большинстве случаев это не позволит добиться максимальной эффективности, так-как у тебя нет доступа к внутренней структуре класса.

П.С. если термины синхронизация, mutex, атомарность тебе ни о чем не говорят, то думаю лучше на данный момент оставить эту задачу и взяться за чтение какой нибудь книги по многопоточному программированию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)