dpdk多執行緒訪問hs的database

2021-10-01 16:39:35 字數 1140 閱讀 2131

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...