国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

redis - 如何理解memcache的原子性操作?
大家講道理
大家講道理 2017-05-31 10:36:15
0
1
1175

memcache的 add 是原子性的,即多個進(jìn)程同時在進(jìn)行add操作,不會產(chǎn)生競態(tài)條件,這樣是不是add 就不會產(chǎn)生并發(fā)了??

大家講道理
大家講道理

光陰似箭催人老,日月如移越少年。

全部回復(fù)(1)
某草草

題主多慮了。正是因?yàn)?add 的原子性,我們才能夠放心的并發(fā)。

你對底層概念了解的不夠。

我們說一個操作并發(fā)是沒有意義的。

a = b + c;

上面的語句是原子性的嗎?上面的語句可以并發(fā)嗎?

a = getValueOfB() + getValueOfC();

上面的呢?

a = add(getValueOfB(), getValueOfC());

這個呢?

+ 是原子性的,那么 + 就不能并發(fā)了嗎?不是。

我們設(shè)想一個任何操作都不是原子性的世界。

拿一個最簡單的 i++ 舉例吧:

i 的值是 4

此時 2 個線程同時執(zhí)行 i++。(姑且認(rèn)為同時就是你說的并發(fā)吧)

i++ 是怎么執(zhí)行的呢?

  • 首先要獲取 i 的值。

  • 把 i 的值加 1

  • 最終結(jié)果存入 i

此時如果 i++ 不是原子性的,那么 2 個線程就會出現(xiàn) 各種執(zhí)行順序,從而得到錯誤的結(jié)果。

  • 第一個線程取得了 i 的值是 4

  • 第二個線程取得了 i 的值是 4

  • 第一個線程把 i 加 1,得到 5

  • 第二個線程把 i 加 1,得到 5

  • 第一個線程把 5 存入 i

  • 第二個線程把 5 存入 i

得到最終結(jié)果,i 是 5。顯然這個結(jié)果是錯誤的。

但是我們卻沒有遇到過這種情況,因?yàn)?i++ 是原子性的。

那么原子性的是不是就無法并發(fā)了?是的。

who care

從使用者角度講,add 操作必須是原子性的。我們并發(fā)的是系統(tǒng),而不是操作。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板