Suggestion on PThreads (passing argument, example3)
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 43/100
- Loại issue
- Tài liệu
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- c
- Lĩnh vực
- documentation
Hướng nghiên cứu
Xem lại phần “Passing Arguments to Threads” của hướng dẫn PThreads cùng với mã và đầu ra của “Example 3 - Thread Argument Passing (Incorrect)”. So sánh đầu ra được hiển thị với bài học đã nêu rằng biến dùng chung t thay đổi trước khi một thread đọc nó; được xem là hoàn tất khi ví dụ và phần giải thích nhất quán minh họa điểm đó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
As from the title, in PThreads tutorial, Passing Arguments to Threads, Example 3
Example 3 - Thread Argument Passing (Incorrect)
This example performs argument passing incorrectly. It passes the address of variable t, which is shared memory space and visible to all threads. As the loop iterates, the value of this memory location changes, possibly before the created threads can access it.
int rc;
long t;
for(t=0; t<NUM_THREADS; t++)
{
printf("Creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &t);
...
}
with output
Creating thread 0
Creating thread 1
...
Creating thread 7
Hello from thread 140737488348392
Hello from thread 140737488348392
...
Hello from thread 140737488348392
Hello from thread 140737488348392
It looks like the program prints the address of the variable t, which might be inconsistent with what we want to illustrate --- "the value of this memory location changes". Can we adjust this to something like the following?
void *PrintHello(void *threadid) {
long * tid;
tid = (long *)threadid;
printf("Hello World! It's me, thread #%ld!\n", *tid);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int rc;
long t;
for (t = 0; t < NUM_THREADS; t++)
{
printf("In main: creating thread %ld\n", t);
/* Don't try to access memory location of t!
* It constantly changes as the loop goes!
* Possibly before the created threads can access it
*/
rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &t);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
return 0;
}
So the output goes like
In main: creating thread 0
In main: creating thread 1
Hello World! It's me, thread #1!
In main: creating thread 2
Hello World! It's me, thread #2!
In main: creating thread 3
Hello World! It's me, thread #3!
In main: creating thread 4
Hello World! It's me, thread #4!
Hello World! It's me, thread #5!
which illustrates that the value t had been t++ed before the created thread read the location.
Thanks!
- Ngôn ngữ chính
- C
- Star
- 259
- Fork
- 129
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của llnl/HPC-Tutorials
-
Update Fortran data typesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 55/100
llnl/HPC-Tutorials#12 ·
Tất cả issue của llnl/HPC-Tutorials
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
yunusemreyl/omen-space#337 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
dependency component: oneMKL module: dpclang
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
intel/torch-xpu-ops#5880 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
area/ci-build bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
DarkFlippers/qUnleashed#423 ·
Maintainer thường phản hồi trong vòng 1 ngày