簡體   English   中英

帶有pthread析構函數的c ++ thread_local析構函數

[英]c++ thread_local destructors with pthread destructors

我想在所有C ++ thread_local析構函數調用之后做一些工作。 這是特定於平台的-Android,因此我可以訪問pthreads

問題是,何時應在C ++ thread_local析構函數之前或之后調用pthread_key_create d析構函數? 還是可以交錯?

我在Linux Mint和以C ++命名的pthread析構函數上進行了測試。

bionic / pthread_exit.cpp當前具有相同的順序:

void pthread_exit(void* return_value) {
  // Call dtors for thread_local objects first.
  __cxa_thread_finalize();
  // Call the TLS destructors.
  pthread_key_clean_all();

但是,這不是已記錄的行為,因此您不應構建依賴它的行為。

如果平台不提供__cxa_thread_atexit_impl ,則GCC的libstdc++使用pthread_key_create 在這種情況下,C ++析構函數在POSIX析構函數的中間位置運行。

據我所知,這里沒有標准需要任何特殊的行為,因為C ++不了解POSIX,POSIX不了解C ++,因此沒有一個標准說明這里發生了什么。 還有一些極端情況涉及線程銷毀期間線程本地數據的復活,具體情況因實現而異。 (一個典型的示例是每個線程記錄器對象,該對象用於從線程局部變量的析構函數進行記錄。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM