pthread_create 地雷點

 #include <pthread.h>

       int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

這個函數怎麼用這裏不多介紹,網上隨便搜都是。

這裏只是想記錄今天自己剛踩的一個雷點:

用pthread_create 創建線程,

需要注意的是該函數的最後一個參數:void *arg,

此參數放的是傳遞給被創建線程的參數的地址,在調用完pthread_create後該指針所指的內存並不會被複制,即使在創建線程裏帶了copy流程,如果在調用完pthread_create後沒有機制保障該內存已經被複制或使用完成的情況下直接釋放或修改arg所指向的內存可能會導致被創建線程獲取該內存出錯,或引起page fault。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章