hyperscan在掃瞄資料的時候,需要少量的臨時空間來儲存動態的內部資料。
只有1個核,但有多個資料庫時
在有多個核同時工作的場景中,掃瞄全域性的hs
資料庫。
下面的**是乙個例子:
hs_error_t err;
/* 為資料庫db建立臨時空間,如果有多個資料庫則需要為scratch_prototype呼叫多次hs_alloc_scratch,
* 例如有db1和db2:
* ...
* err = hs_alloc_scratch(db1, &scratch_prototyep);
* ...
* err = hs_alloc_scratch(db2, &scratch_prototyep);
* ...
**/hs_scratch_t *scratch_prototype = null;
err = hs_alloc_scratch(db, &scratch_prototype);
if (err != hs_success)
/* 每個執行緒都應該有乙個自己的scratch臨時空間 */
hs_scratch_t *scratch_thread1 = null;
hs_scratch_t *scratch_thread2 = null;
/* 為每個執行緒轉殖乙個臨時空間 */
err = hs_clone_scratch(scratch_prototype, &scratch_thread1);
if (err != hs_success)
err = hs_clone_scratch(scratch_prototype, &scratch_thread2);
if (err != hs_success)
/* 將alloc申請的臨時空間釋放,因為別的執行緒已不再需要這個臨時空間 */
hs_free_scratch(scratch_prototype);
在沒有為每個執行緒申請臨時空間而共用1個臨時空間,執行緒不安全,會發生段錯誤。
該例子中的兩個執行緒此時可以使用自己的臨時空間來訪問database了。
多執行緒訪問DataTable
專案中需要讀取資料庫中的多張表。由於表的資料比較多,序列讀取時耗時比較多,所以對程式做了一點優化。環境.net 3.5,sql server 2012,visual studio 2015 過程專案中使用儲存過程序列地讀取資料庫,儲存過程接受同乙個表變數作為引數。但是當在多執行緒中複製datatab...
控制項多執行緒訪問的問題
最近在修改打包的介面時候,發現debug的時候,會出現多執行緒不允許訪問控制項的問題,上網查了一下,大多數解決方法都是呼叫控制項的invoke的方法,或者乾脆遮蔽掉該異常資訊。不知道什麼時候控制項可以正常允許的多執行緒訪問?vs 多執行緒debug 真難受 不知道vs2008和vs2010有沒有改進...
c 多執行緒訪問介面
c 2005後不再支援多執行緒直接訪問介面的控制項 介面建立執行緒與訪問執行緒不是同乙個執行緒 不過可以使用delegate來解決 2.定義執行緒函式 在另乙個執行緒中可以對介面控制項進讀操作 view plaincopy to clipboardprint?private void progres...