Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: mega_m от Декабрь 22, 2006, 23:19



Название: Одна и таже библиотека в разных потоках
Отправлено: mega_m от Декабрь 22, 2006, 23:19
Можно делать так ?

thread 1:      loadLib(a.so)
и параллельно в другом потоке подгружать одну и туже либу
thread 2:      loadLib(a.so)

или использовать Mutex для этих дел и загружать её один раз.


Название: Одна и таже библиотека в разных потоках
Отправлено: Вячеслав от Декабрь 22, 2006, 23:54
Насколько я помню, so грузиться только один раз на уровне системы ... Но пингвина под рукой нет - проверить не могу ... Но воспоминания отчетливые ;)


Название: Одна и таже библиотека в разных потоках
Отправлено: mega_m от Декабрь 23, 2006, 00:07
собственно нужен не только линукс. в ассистенте вроде ничего нет по этому поводу

>Насколько я помню, so грузиться только один раз на уровне системы

Вот этот вопрос и волнует сама система будет разруливать мои обращения к библиотеке из
разных потоков?

по большому счету нужен только вызов функции

 typedef void (*MyPrototype)();
 MyPrototype myFunction =
         (MyPrototype) QLibrary::resolve("mylib", "mysymbol");
 if (myFunction)
     myFunction();


Название: Одна и таже библиотека в разных потоках
Отправлено: Dendy от Декабрь 23, 2006, 01:12
Идём в документацию по QLibrary и видим:

Note: All the functions in this class are reentrant.

Другими словами: Да, можно создавать екземпляр QLibrary в другом потоке и резолвить из него функции. Если такая библиотека уже бьІла загружена, её ресурсьІ становятся разделяемьІми.


Название: Одна и таже библиотека в разных потоках
Отправлено: mega_m от Декабрь 23, 2006, 15:39
Спасибо. Если бы все с такими золотыми подсказками было бы !