Linux Linux中eventfd的使用

2021-08-07 18:38:52 字數 852 閱讀 6996

eventfd是用來實現多程序或多執行緒之間的事件通知的,常見的事件通知機制除了eventfd外,還有條件變數和管道等 方式。

條件變數必須和互斥鎖相結合使用,使用起來較麻煩,並且條件變數不能像eventfd一樣為i/o事件驅動。

管道可以和i/o復用很好的融合,但是管道比eventfd多用了乙個檔案描述符,而且 管道核心還得給其管理的緩衝區,eventfd則不需要。

eventfd的介面形式如下:

int eventfd(unsigned

int initval, int flags);

eventfd()建立乙個檔案描述符,這個檔案描述符使用者可以通過等待其可讀來實現事件通知,該通知靠核心來響應使用者空間的應用事件。上述介面的第乙個引數是由核心來保持的64位計數器,這個計算器由引數initval來初始化,一般設為0。

第二個引數flags可以為efd_nonblock或efd_cloexec。

#include 

#include

#include

#include

int fd;

uint64_t buffer;

void threadfunc(void)

printf("t = %11u buffer = %11u\n", t, buffer);

if (t == 8)

}}int main()

if (pthread_create(&tid, null, threadfunc, null) < 0)

while (1)

sleep(2);

}return

0;}

MySQL 簡述MySQL中的事件Event

事件 一組sql集,用來執行定時任務,跟觸發器很像,都是被動執行的。事件是因為時間到了觸發執行,而觸發器是因為某件事件 增刪改 觸發執行。1.查詢mysql的事件功能狀態 想要使用mysql的事件功能,前提是確保服務開啟。查詢指令如下 select event scheduler 或show var...

vue的keep alive中使用EventBus

最近專案中由於列表居多且都做了下拉重新整理上拉載入,所以就使用了keep alive元件來快取頁面資料,但是當在其他頁面做一些操作改變了列表資料,當來到列表的時候每次都要下拉重新整理一下,體驗不好,所以就使用到了eventbus,在需要更新的時候就用eventbus來重新整理列表。eventbus用...

mysql 監測事件 MySQL事件 Events

mysql事件 events 一 關鍵字 event 二 語法 create event?if not exists 如果不存在則建立 event name?on schedule schedle on completion not preserve enable desable comment c...