2013-03-27 25 views
1

它通常你需要extern一些C的API是這樣的:如何檢測線程安全的API中

set_module_callback(module, some_func, func_args); 

module需要some_func線程安全,即存在也許超過1個線程調用這個函數,但我不知道它是否是線程安全,是有一些方法來測試同時呼籲set_module_callback

回答

0

我看沒有辦法自動有一些片碼測試的另一段代碼。

爲了讓你真的相信TI是線程安全的,你將不得不進去看看吧/分析它做什麼和在那裏的副作用可能會出現/在需要的地方添加一個互斥。

2

線程安全是非常複雜的領域。你可以從很多方面獲得不安全性,即使受到良好保護的代碼也可能會與另一部分代碼進行溝通。這就是爲什麼最好假設some_func是不安全的,並提供(例如)關於共享資源的關鍵部分。 所以回答是'不'

+0

這可能是一般支持未知外部函數的最實用方法。假設它們不是線程安全的,並打包調用。可能不理想的性能,但可能是更可信的方法。 – 2013-03-27 08:21:58

0

如果你的應用程序是一個POSIX的應用程序,你可以試試Helgrind tool它做一些併發訪問檢測。

但它基於您的軟件如何調用API。所以如果是或者不是你的API是線程安全的,你將不會有絕對的一般答案。給定一個特定的應用程序,你只會得到這個答案。