APUE---chap3文件I/O---3.11原子操作
生活随笔
收集整理的這篇文章主要介紹了
APUE---chap3文件I/O---3.11原子操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一. 多線程帶來的文件讀寫問題
- 考慮下面這種情況,單進程去讀寫文件沒有什么問題
如果我們有兩個進程同時對這個文件進行寫入。A進程使用lseek對文件末尾字節進行寫入,B進程也使用lseek對文件末尾進行寫入。本來AB進程的目的都是想在文件的尾端進行寫入,如果此時某個進程先執行,那么文件的內容增加,另外一個內容再去寫入時就不會在尾端寫入了,而是插入。這就是多線程帶來的問題。
- 所以關鍵的問題是:我們希望某個線程去寫,保存文件是一個不可以被其他線程打斷的操作。就是說希望A線程打開-->寫-->完成,這三個動作是一起的不會被打斷的動作。
二. 原子操作(atomic operation)
概念:原子操作指的是不會被多線程打斷的一個最小操作集合。
比如對某一段代碼加鎖,那么lock()與unlock()之間的代碼就不會被其他線程打斷。
三. 用pread()/pwrite()解決多線程的讀寫問題
pread()和pwrite()就是原子函數,不用考慮“一”中出現的多線程讀寫一個問題帶來的問題。
#include <unistd.h> ssize_t pread(int fd, void *buf, size_t nbytes, off_t offset);ssize_t pwrite(int fd, const void *buf, size_t nbytes, off_t offset);用法和read/write差不多,不過需要其他的參數。
總結
以上是生活随笔為你收集整理的APUE---chap3文件I/O---3.11原子操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猫眼电影票房爬取到MySQL中_猫眼电影
- 下一篇: oracle fx成立时间,oracle