我在C中使用posix線程。我的程序中有兩個線程,即thread1和thread2。 thread1啓動thread2。基於來自調用線程的變量值關閉線程
thread1維護變量var1,基於哪個thread2必須安全退出。
thread2調用很多冗長的函數(其運行時間可能高達5秒)。在thread2中有很多使用malloc的內存分配。只要var1成爲真,我需要關閉thread2,但是隻有在釋放所有分配的內存之後。如何做到這一點?
的代碼看起來是這樣的:
void * func1(void *arg)
{
pthread_create(&thread2, &attr, func2, NULL);
while(1)
{
// ...
var1 = func3();
if(var1 == true)
{
// Cancel thread2
}
// ...
}
}
void * func2(void *arg)
{
// ...
func4(); // runs for 2 sec
char* var2 = malloc(10);
func5(); // runs for 5 sec
char* var3 = malloc(20);
// ...
cleanup:
free(var2);
free(var3);
return (void*) 0;
}
我的問題是如何安全關閉/退出/取消thread2? – mk09
沒有神奇的捷徑。你必須執行這個過程的每個部分,包括檢查安全點的取消並適當地釋放資源。 –