О безопасности потоков с использованием QThreadStorage - PullRequest
0 голосов
/ 23 июня 2011

Это многопоточный вопрос, когда я в основном начал делать библиотеку потоко-безопасной. Мой сценарий использования следующий -

struct <>
    {

      int thread_specific_value;
}

1) Например, Spin 5 потоков.

2) Каждый поток выполняет операции и сохраняет thread_specific_value, например, в приведенной выше структуре данных. Это динамически распределяется при инициализации каждого потока и добавляется в QThreadStorage.

3) Как только все потоки возвращаются в основной поток, мне нравится получать доступ к значениям errno всех потоков и выполнять некоторую обработку. Прежде чем удалить поток из основного потока, могу ли я получить информацию о его хранилище и сохранить его в специальном хранилище основного потока.

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

1 Ответ

3 голосов
/ 23 июня 2011

Данные, хранящиеся в QThreadStorage, доступны только из потока, который их туда поместил. Период. Если вы хотите получить доступ к тем же данным из других потоков, вы должны хранить их в другом месте. В частности, специфичное для потока значение уничтожается при выходе из потока; если вы хотите сохранить значение, сохраните его где-нибудь до выхода из потока.

Короче говоря, не пытайтесь использовать QThreadStorage для связи между потоками. Это не то, для чего это.

...