它通常你需要extern
一些C的API是這樣的:如何檢測線程安全的API中
set_module_callback(module, some_func, func_args);
但module
需要some_func
是線程安全,即存在也許超過1個線程調用這個函數,但我不知道它是否是線程安全,是有一些方法來測試同時呼籲set_module_callback
?
它通常你需要extern
一些C的API是這樣的:如何檢測線程安全的API中
set_module_callback(module, some_func, func_args);
但module
需要some_func
是線程安全,即存在也許超過1個線程調用這個函數,但我不知道它是否是線程安全,是有一些方法來測試同時呼籲set_module_callback
?
我看沒有辦法自動有一些片碼測試的另一段代碼。
爲了讓你真的相信TI是線程安全的,你將不得不進去看看吧/分析它做什麼和在那裏的副作用可能會出現/在需要的地方添加一個互斥。
線程安全是非常複雜的領域。你可以從很多方面獲得不安全性,即使受到良好保護的代碼也可能會與另一部分代碼進行溝通。這就是爲什麼最好假設some_func
是不安全的,並提供(例如)關於共享資源的關鍵部分。 所以回答是'不'
如果你的應用程序是一個POSIX的應用程序,你可以試試Helgrind tool它做一些併發訪問檢測。
但它基於您的軟件如何調用API。所以如果是或者不是你的API是線程安全的,你將不會有絕對的一般答案。給定一個特定的應用程序,你只會得到這個答案。
這可能是一般支持未知外部函數的最實用方法。假設它們不是線程安全的,並打包調用。可能不理想的性能,但可能是更可信的方法。 – 2013-03-27 08:21:58