Обычно структура, содержащая данные для потока, объявляется и инициализируется, а указатель на эту структуру передается в качестве аргумента потока.
Затем функция потока возвращает void*
обратно к указателю структуры и получает данные.
Просто помните, что время жизни этой структуры все еще должно быть действительным, когда поток запланирован (что означает, что вы должны быть очень осторожны, если это локальная переменная). И, как указал Джонатан Леффлер, передайте каждому потоку его собственный экземпляр структуры или будьте очень осторожны при повторном использовании. В противном случае поток может прочитать данные, предназначенные для другого потока, если структура будет повторно использована до того, как поток завершит работу с ним.
Вероятно, самый простой способ решить эти проблемы - malloc()
структура для каждого потока, инициализировать его, передать указатель на поток и позволить потоку free()
, когда это будет сделано с данными.