APUE---chap3文件I/O---3.11原子操作
生活随笔
收集整理的這篇文章主要介紹了
APUE---chap3文件I/O---3.11原子操作
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一. 多線(xiàn)程帶來(lái)的文件讀寫(xiě)問(wèn)題
- 考慮下面這種情況,單進(jìn)程去讀寫(xiě)文件沒(méi)有什么問(wèn)題
如果我們有兩個(gè)進(jìn)程同時(shí)對(duì)這個(gè)文件進(jìn)行寫(xiě)入。A進(jìn)程使用lseek對(duì)文件末尾字節(jié)進(jìn)行寫(xiě)入,B進(jìn)程也使用lseek對(duì)文件末尾進(jìn)行寫(xiě)入。本來(lái)AB進(jìn)程的目的都是想在文件的尾端進(jìn)行寫(xiě)入,如果此時(shí)某個(gè)進(jìn)程先執(zhí)行,那么文件的內(nèi)容增加,另外一個(gè)內(nèi)容再去寫(xiě)入時(shí)就不會(huì)在尾端寫(xiě)入了,而是插入。這就是多線(xiàn)程帶來(lái)的問(wèn)題。
- 所以關(guān)鍵的問(wèn)題是:我們希望某個(gè)線(xiàn)程去寫(xiě),保存文件是一個(gè)不可以被其他線(xiàn)程打斷的操作。就是說(shuō)希望A線(xiàn)程打開(kāi)-->寫(xiě)-->完成,這三個(gè)動(dòng)作是一起的不會(huì)被打斷的動(dòng)作。
二. 原子操作(atomic operation)
概念:原子操作指的是不會(huì)被多線(xiàn)程打斷的一個(gè)最小操作集合。
比如對(duì)某一段代碼加鎖,那么lock()與unlock()之間的代碼就不會(huì)被其他線(xiàn)程打斷。
三. 用pread()/pwrite()解決多線(xiàn)程的讀寫(xiě)問(wèn)題
pread()和pwrite()就是原子函數(shù),不用考慮“一”中出現(xiàn)的多線(xiàn)程讀寫(xiě)一個(gè)問(wèn)題帶來(lái)的問(wèn)題。
#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差不多,不過(guò)需要其他的參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的APUE---chap3文件I/O---3.11原子操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 猫眼电影票房爬取到MySQL中_猫眼电影
- 下一篇: oracle fx成立时间,oracle