Нет, вы не хотите этого делать.
Это может работать или не работать, в зависимости от того, как именно все это вызывается - реально, на большинстве архитектур, с большинством компиляторов, память, на которую указывает & args, останется действительной, но вы, скорее всего, в итоге получите несколько потоков, использующих одну и ту же структуру myptreadargs, которая, вероятно, вам не нужна (реальное поведение не определено, это только вероятный результат).
Вместо malloc( )
struct mypthreadargs
.
Если вы действительно хотите обойти это, и вы хотите жить с максимальным количеством потоков в полете одновременно, вы можете установить массив структур args и использовать новый для каждой итерации, и отметить они доступны, когда вызванные потоки сделаны с ними. Однако в этот момент вы в основном реализуете ограниченный malloc( )
, поэтому я бы поставил под сомнение мудрость упражнения.