我有一個多線程程序,這些線程的工作可能需要相當長的時間。函數內部的pthread_exit()
如果我想停止程序的執行,我有一個原子開關,我從0更改爲1,這將指示它應該退出的線程。這目前得到檢查在一個while循環。
但是,while循環的迭代可能需要相當長的時間。現在我想要在while循環中基本定義一些'優雅'退出點。
基本上我會定義一個宏短這樣的,其中ks爲開關:
#define GRACE_EXIT(ks) \
if (__atomic_load_n(ks, __ATOMIC_SEQ_CST) == 1) \
pthread_exit(NULL);
現在,我不知道是否被允許從我從線程中調用函數調用它。
基本上在while循環內調用各種函數。我遇到的基本問題是,如果允許從不是線程入口點的函數內調用pthread_exit()
。我所關心的第二個問題是清理不在調用函數範圍內的自動變量。
讓我們說我是4個'深'的函數並且調用這個宏。即使它們不在範圍內,是否所有自動變量都被清除了?
如果'pthread_exit'只能在線程入口函數中使用,那就完全沒用了。你可以在那裏使用'return'。 – 2014-10-16 13:54:40
的確如此。但它不會是我第一次看到這樣的設計決定...... – 2014-10-16 13:56:15