簡體   English   中英

aio_error 可以用來輪詢 aio_write 的完成嗎?

[英]Can aio_error be used to poll for completion of aio_write?

我們有一些代碼遵循

aiocb* aiocbptr = new aiocb;
// populate aiocbptr with info for the write
aio_write( aiocbptr );

// Then do this periodically:
if(aio_error( aiocbptr ) == 0) {
    delete aiocbptr;
}

aio_error 意味着在寫入完成時返回 0,因此我們假設此時我們可以在 aiocbptr 上調用 delete。

這在大多數情況下似乎工作正常,但我們最近開始遇到隨機崩潰。 證據表明 aiocbptr 指向的數據在調用 delete 后被修改。

像這樣使用 aio_error 來輪詢 aio_write 完成是否有任何問題? 是否保證aio_error 返回0 后aiocb 不會被修改?

此更改似乎表明此后可能已使用 aio_error 修復了某些問題。 我們在 x86 RHEL7 linux 上運行,glibc v 2.17 早於此修復程序。

我們嘗試使用 aio_suspend 除了 aio_error,所以一旦 aio_error 返回 0,我們調用 aio_suspend,這意味着等待操作完成。 但操作應該已經完成,所以 aio_suspend 應該什么都不做。 但是,它似乎解決了崩潰問題。

是的,我的承諾是修復缺失的 memory 屏障。 使用例如 aio_suspend 會觸發 memory 屏障,從而也修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM