Tôi đang cố gắng viết một chương trình đa luồng, số lượng luồng dựa trên đầu vào dòng lệnh và vì vậy tôi không thể tạo các chuỗi được khai báo trước. Đây có phải là cách hợp lệ để làm điều đó không?Làm thế nào để đẻ trứng n đề?
int threads = 5; // (dynamic, not hard-coded)
int i = 0;
pthread_t * thread = malloc(sizeof(pthread_t)*threads);
for (i = 0; i < threads; i++) {
pthread_t foobar;
thread[i] = foobar; // will this cause a conflict?
}
for (i = 0; i < threads; i++) {
int ret = pthread_create(&thread[i], NULL, (void *)&foobar_function, NULL);
if(ret != 0) {
printf ("Create pthread error!\n");
exit (1);
}
}
Dưới đây là kết quả của tôi từ sửa đổi đề nghị dưới đây. Dường như làm việc tốt.
int threads = 5;
int i;
pthread_t * thread = malloc(sizeof(pthread_t)*threads);
for (i = 0; i < threads; i++) {
int ret = pthread_create(&thread[i], NULL, &foobar_function, NULL);
if(ret != 0) {
printf ("Create pthread error!\n");
exit (1);
}
// pthread_join(thread[i], NULL); // don't actually want this here :)
}
sleep(1); // main() will probably finish before your threads do,
free(thread); // so we'll sleep for illustrative purposes
bạn không thể chỉ định một số nguyên cho một chuỗi trong 'int threads = argv [3]' bit. Bạn phải sử dụng 'atoi' hoặc sscanf –
cảm ơn, bạn nói đúng. đã sửa. –
Vâng, với 'pthread_join()' ở vị trí của nó, bạn sẽ tạo ra một chuỗi, và sau đó đợi nó kết thúc trước khi sinh ra cái tiếp theo. Vì vậy, trong thực tế, bạn sẽ được bán đơn luồng ở đây :) –