Это вопрос с потоками, в котором я в основном начал создавать поточную библиотеку. Мой прецедент выглядит следующим образом:О потокобезопасности с использованием QThreadStorage
struct <>
{
int thread_specific_value;
}
1) Например, спиновые 5 нитей.
2) Каждый поток выполняет операцию и сохраняет thread_specific_value в вышеуказанной структуре данных, например. Это динамически выделяется при инициализации каждого потока и добавляется в QThreadStorage.
3) Как только все потоки возвращаются в основной поток, мне нравится получать доступ к значениям errno всех потоков и выполнять некоторую обработку. Прежде чем я удалю поток из основного потока, могу ли я получить информацию о его данных хранения и сохранить в конкретном хранилище основного потока.
В двух словах, как я могу перебирать через QThreadStorage все данные, зависящие от потока, и выполнять некоторую обработку из основного потока?
Спасибо за ваш ответ. Как я уже говорил, я не удаляю нить. Так, согласно документации, данные, зависящие от потока, не уничтожаются. Есть ли какая-либо другая пользовательская структура данных хранения потоков с открытым исходным кодом, которую я могу использовать, которая может использовать эту доступность? – Kartlee
«QThreadStorage берет на себя ответственность за данные (которые должны быть созданы в куче с новыми) и удаляет их, когда поток выходит, как обычно, так и через завершение». - когда он завершается, а не когда он удаляется. Нетрудно катить собственный метод передачи данных из потока, хотя, и есть достаточная разница в случаях использования, что я не знаю ни одного действительно стандартизованного метода ... (плюс разоблачение TLS - очень редкий случай использования. .) – bdonlan
Мы по-прежнему можем использовать QThreadStorage для определенного вида межпротокольной связи. Скажем, чтобы пометить нить каким-либо маркером, который распознается общей функцией. Я использую его для распознавания «имени» потока, в котором работает код. – AlexanderVX