Tôi có một chức năng pthread Á hậu joinable được xác định như sau:pthread_exit vs trở
void *sumOfProducts(void *param)
{
...
pthread_exit(0);
}
chủ đề này được cho là tham gia các chủ đề chính.
Bất cứ khi nào tôi chạy chương trình của tôi qua Valgrind tôi sẽ nhận được rò rỉ sau:
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 968 bytes in 5 blocks
suppressed: 0 bytes in 0 blocks
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 10)
Tôi đã kiểm tra man page của pthreads mà nói:
The new thread terminates in one of the following ways:
* It calls pthread_exit(3), specifying an exit status value that is
available to another thread in the same process that calls
pthread_join(3).
* It returns from start_routine(). This is equivalent to calling
pthread_exit(3) with the value supplied in the return statement.
* It is canceled (see pthread_cancel(3)).
* Any of the threads in the process calls exit(3), or the main thread
performs a return from main(). This causes the termination of all
threads in the process.
Kỳ diệu thay, khi tôi thay thế pthread_exit() với câu lệnh return, rò rỉ biến mất.
return(NULL);
câu hỏi thực tế của tôi là ba mũi nhọn:
- Ai đó có thể giải thích tại sao câu lệnh return đã không có rò rỉ?
- Có một số khác biệt cơ bản giữa cả hai câu lệnh, liên quan đến thoát khỏi chuỗi không?
- Nếu có, khi nào người ta nên ưa thích người kia?
Bạn có thực sự sử dụng C++ không? C++ sử dụng phạm vi để phá hủy các đối tượng và trả về sẽ "để lại" phạm vi đó trong khi pthread_exit sẽ không. –
Tôi xin lỗi nhưng tôi không bao giờ đề cập đến C++ ở bất cứ đâu trong câu hỏi của tôi. Tôi đang làm tất cả mọi thứ trong C như của bây giờ. –
Tôi biết bạn đã không đề cập đến nó, nhưng đó là một đoán, đó là lý do tại sao tôi hỏi. :) Bạn có thể cung cấp [test] hoàn chỉnh (http://sscce.org/) [case] (http://www.xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml) không? –