精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原子操作 vs 非原子操作

開發
在網上已經有很多有關介紹原子操作的內容,通常都是注重于原子讀-修改-寫(RMW)操作。然而,這些并不是原子操作的全部,還有同樣重要的原子加 載和原子存儲。在這篇文章中,我將要在處理器級別和C/C++語言級別兩個方面來對比原子加載和原子存儲與它們相應的非原子部分。沿著這條路,我們將弄清 楚C++11中“數據競爭”這個概念。

在網上已經有很多有關介紹原子操作的內容,通常都是注重于原子讀-修改-寫(RMW)操作。然而,這些并不是原子操作的全部,還有同樣重要的原子加 載和原子存儲。在這篇文章中,我將要在處理器級別和C/C++語言級別兩個方面來對比原子加載和原子存儲與它們相應的非原子部分。沿著這條路,我們將弄清 楚C++11中“數據競爭”這個概念。

1

共享內存中的原子操作是指它是否完成了一個線程相關的單步操作。當一個原子存儲作用于一個共享變量時,其他的線程不能監測到這個未完成的修改值。當 一個原子加載作用于一個共享變量時,它讀取到這個完整的值,就像此時出現了一個單獨的時刻,而非原子加載和存儲則不能做到這些保證。

如果沒有這些保證,無鎖編程將不可能實現,因為你不能使不同的線程同時操作一個共享變量。我們可以制定如下規則:

任何時刻兩個線程同時操作一個共享變量,當其中一個為寫操作時,這兩個線程必須使用原子操作。

如果你違反這條規則,并且每個線程都使用非原子操作,你將會看到C++11標準中提到的數據競爭(不要混淆于Java中數據競爭的概念,這個是不同的,或者說是更廣義上的競爭情況)。C++11標準并沒有告訴你為什么數據競爭是糟糕的,但只要你出現這種情況,就會發生“未定義行為”(1.10.21部分)。這種糟糕的數據競爭的原因是非常簡單的:它們導致了讀寫撕裂。

一個內存操作可以是非原子的,因為它使用非原子的多CPU指令,即使當使用單CPU指令時也是非原子的,因為你不能簡單的設想你寫出的可移植代碼。讓我們來看幾個例子。

非原子性是由于多CPU指令

假設你有一個64位初始化為0的全局變量。

  1. uint64_t sharedValue = 0

在某些時刻,你給這個變量賦一個64位的值。

  1. void storeValue() 
  2.      sharedValue = 0x100000002

當你在32位的x86環境下使用GCC來編譯這個函數時,將會生成如下機器碼。

  1. $ gcc -O2 -S -masm=intel test.c 
  2. $ cat test.s 
  3.       ... 
  4.       mov DWORD PTR sharedValue, 2 
  5.       mov DWORD PTR sharedValue+4, 1 
  6.       ret 
  7.       ... 

這個時候你就會看到,編譯器會使用兩個單獨的機器指令來完成這個64位的賦值。第一條指令設置低32位的0×00000002,第二條指令設置高32位的0×00000001.非常明顯,這個賦值操作是非原子的。如果共享變量同時被不同的線程存取,就會出現很多錯誤:

  • 如果一個線程在兩個機器指令的間隙先調用存儲變量,將會在內存中留下像0×0000000000000002這樣的值——這是一個寫撕裂。在這個時候,如果另一個線程讀取共享變量,它將會接收到一個完全偽造的、沒有人想要存儲的值。
  • 更糟糕的是,如果一個線程在兩個機器指令的間隙先占用變量,而另一個線程在第一個線程重新獲得這個變量之前修改了sharedValue,那將導致一個永久性的寫撕裂:一個線程得到高32位,另一個線程得到低32位。
  • 在多核設備上,并不是只有先行占有其中一個線程來導致一個寫撕裂。當一個線程調用storeValue時,任何線程在另一個核上可能同時讀取一個明顯未修改完的sharedValue。

同時讀取sharedValue會帶給它一系列的問題:

  1. uint64_t loadValue() 
  2.       return sharedValue; 
  3.   
  4. $ gcc -O2 -S -masm=intel test.c 
  5. $ cat test.s 
  6.       ... 
  7.       mov eax, DWORD PTR sharedValue 
  8.       mov edx, DWORD PTR sharedValue+4 
  9.       ret 
  10.       ... 

這里也一樣,編譯器會使用兩條機器指令來執行這個加載操作:第一條讀取低32位到eax,第二條讀取高32位到edx。在這種情況下,如果對于sharedValue進行同時存儲則會發現,它將導致一個讀撕裂——即使這個同時存儲是原子的。

這個問題并不是理論上的,Mintomic的 測試集包含了一個名為test_load_store_64_fail的測試案例,在這個案例中,一個線程使用一個普通的賦值操作,存儲了很多64位的值 到一個單獨的變量,同時另一個線程對這個變量反復地執行一個簡單的加載,來確認每一個結果。在一個多核的x86機器上,這個測試像我們想象的一樣一直失 敗。

2

#p# 

非原子的CPU指令

一個內存操作可以是非原子的,甚至是當由一個單CPU指令來執行的時候。例如,ARMv7指令設置包含了將兩個由32位源寄存器的內容存儲到內存中的一個64位值的strd指令。

  1. strd r0, r1, [r2] 

在一些ARMv7處理器中,這條指令是非原子的。當這個處理器遇到這條指令時,它實際上在底層執行兩個單獨的32位存儲(A3.5.3部分)。再來 一次,另一個線程在一個單獨的核上運行,有可能觀察到一個寫撕裂。有趣的是,寫撕裂更可能出現在一個單核的設備上:例如,一個預定線程的上下文切換的系統 中斷,確實可以執行在兩個內部的32位存儲之間!在這種情況下,當這個線程從這個中斷恢復時,它將再一次重新調用這個strd指令。

再看另一個例子,眾所周知,在x86環境下,如果內存操作數是自然對齊的,那么一個32位的mov指令就是原子的,但如果不是自然對齊,那么將是非 原子的。換句話說,原子性的保證僅僅是當一個32位整數的地址正好是4的倍數的時候。Mintomic提出另一個證實這個保證的測試案 例,test_load_store_32_fail。就像寫的那樣,這個測試在x86總是成功的,但是如果你修改這個測試,強制將sharedInt置 于一個未對齊的地址,它將失敗。在我的Core 2 Quad Q6600上,這個測試失敗了,因為sharedInt在一個寄存器中越界了。

  1. // Force sharedInt to cross a cache line boundary: 
  2. #pragma pack(2) 
  3. MINT_DECL_ALIGNED(static struct, 64) 
  4.       char padding[62]; 
  5.       mint_atomic32_t sharedInt; 
  6. g_wrapper; 

3

現在已經有很多特定于處理器的細節,讓我們再來看看C/C++語言級別的原子性。

所有的C/C++操作被認定為非原子的

在C和C++中,所有操作被認定是非原子的,甚至是普通的32位整數賦值,除非被別的編譯器或者硬件供應商指定。

  1. uint32_t foo = 0
  2.   
  3. void storeFoo() 
  4.       foo = 0x80286

這個語言標準并沒有提到任何有關于這種情況下的原子性。也許整型賦值是原子的,也許不是。因為非原子操作沒有做任何保證,在C定義中,普通整型賦值是非原子的。

實際上,我們對我們的目標平臺了解的更多。例如,大家都知道在現在的x86、x64、Itanium、SPARC、ARM和PowerPC處理機 上,只要目標變量是自然對齊的,那么普通32位整型賦值就是原子的,你可以通過查詢你的處理機手冊或者編譯器文檔來證實。在游戲行業,我可以告訴你很多關 于32位整型賦值依賴這個特殊保證的例子。

盡管如此,但在寫真正的可移植的C和C++代碼時,有一個歷史悠久的傳統,就是我們所知道的僅僅是語言標準告訴我們的。可移植的C和C++代碼的設 計是為了可以運行在任何可能的計算設備上,過去的、現在的以及虛擬的。就我自己而言,我想設計一種機器,它的內存僅僅可以通過先到先得來改變:

4

在這樣的機器上,你絕對不會想要在執行一個并發的讀操作的同時執行一個普通的賦值,你可以結束讀取一個完整的隨機值。

在C++11中,有一個最終的方案來執行實際的可移植原子加載和存儲——C++11原子庫。通過使用C++11原子庫來執行原子加載和存儲,甚至可以運行在虛擬的計算機上,即使這意味著C++11原子庫必須默默地加一個互斥量來確保每一個操作都是原子的。這里還有我上個月發布的Mintomic庫,它并不支持這么多平臺,但是可以運行在很多以前的編譯器上,它是優化過的,并且保證是無鎖的。

寬松的原子操作

讓我們回到前面那個sharedValue例子最開始的地方,我們將用Mintomic重寫它,這樣所有的操作就可以原子地執行在任何Mintomic支持的平臺上了。首先,我們必須聲明sharedValue為Mintomic原子數據類型中的一個。

  1. #include <mintomic/mintomic.h> 
  2. mint_atomic64_t sharedValue = { 0 }; 

mint_atomic64_t類型保證了在所有平臺上原子存取的正確內存對齊。這是非常重要的,因為,例如ARM的GCC4.2編譯器附帶的Xcode3.2.5并不保證普通的uint64_t以8字節對齊。

對于storeValue,通過執行一個普通的、非原子的賦值來替代,我們必須調用mint_store_64_relaxed。

  1. void storeValue() 
  2.      mint_store_64_relaxed(&sharedValue, 0x100000002); 

相似的,在loadValue中,我們調用mint_load_64_relaxed。

  1. uint64_t loadValue() 
  2.       return mint_load_64_relaxed(&sharedValue); 

使用C++11的術語,這些函數現在不存在數據競爭。當并發操作執行時,無論代碼運行在ARMv6/ARMv7 (Thumb或者ARM模式)、x86、x64 或者PowerPC上,絕對不可能出現讀寫撕裂。你是否好奇mint_load_64_relaxed和mint_store_64_relaxed是如 何工作的,這兩個函數在x86上都是擴展到一個內聯的cmpxchg8b指令上,對于其他平臺,請查詢Mintomic的實現

在C++11中明確的寫出了類似的代碼:

  1. #include <atomic> 
  2.   
  3. std::atomic<uint64_t> sharedValue(0); 
  4.   
  5. void storeValue() 
  6.      sharedValue.store(0x100000002, std::memory_order_relaxed); 
  7.   
  8. uint64_t loadValue() 
  9.      return sharedValue.load(std::memory_order_relaxed); 

你會注意到,在Mintomic和C++11的例子中都使用了寬松的原子性,由_relaxed后綴的多個標識符來證明。_relaxed后綴暗示了,就像普通的加載和存儲一樣,沒有內存訪問排序的保證。

一個寬松的原子加載(或存儲)和一個非原子加載(或存儲)之間的唯一區別就是,寬松的原子操作保證了原子性,沒有其他區別來保證。

特別的,在程序指令中,一個寬松的原子操作,被它前面或者后面的指令由于處理機本身任何一個因為編譯器重新排序或者內存重新排序所產生的影響,對內存來說依然是合法的。編譯器甚至可以在冗余的寬松原子操作上執行優化,就像非原子操作一樣。就一切情況而言,這些操作仍然是原子的。

當并發操作同時共享內存時,我認為,一直使用Mintomic或者C++11原子庫函數是非常好的練習,甚至當你知道在你的目標平臺上,一個普通的加載或者存儲已經是原子的情況下。一個原子庫函數就像提示這個變量是并發數據存儲的目標。

我希望,現在大家可以更清楚的知道,為什么《世界上最簡單的無鎖哈希表》使用Mintomic庫函數來并發地操作不同線程的共享內存。

原文鏈接:http://preshing.com/20130618/atomic-vs-non-atomic-operations/

譯文鏈接:http://blog.jobbole.com/54345/

責任編輯:陳四芳 來源: 伯樂在線
相關推薦

2020-11-27 06:44:22

原子加鎖x86

2021-04-01 17:36:30

鴻蒙HarmonyOS應用開發

2021-06-29 10:07:24

Javalong原子操作

2023-06-27 08:45:19

原子操作Golang

2023-09-19 23:26:15

++i原子操作C++

2012-05-23 12:49:58

Java自增操作原子性

2023-07-13 08:26:49

Java羅漢增強類

2021-09-22 12:56:19

編程技能Golang

2022-08-21 17:35:31

原子多線程

2022-09-09 15:32:46

intC語言原子操作

2020-05-22 10:35:07

CPU線程操作系統

2022-07-01 11:07:56

int原子操作代碼

2021-06-03 14:00:35

PolarDB

2021-06-02 16:30:33

PolarDB原子性數據庫

2023-01-05 12:30:32

Redis

2023-11-07 08:04:19

Go并發程序原子操作

2013-12-18 10:27:11

OpenMP線程

2025-11-18 01:00:00

2020-10-19 06:43:53

Redis腳本原子

2013-08-09 09:27:31

點贊
收藏

51CTO技術棧公眾號

国产亚洲欧洲高清一区| 五月天一区二区| 91久久久在线| 国产主播在线观看| 久久成人高清| 在线电影院国产精品| 97碰在线视频| 国产综合视频一区二区三区免费| 美女网站色91| 97久久久免费福利网址| 高清国产在线观看| 综合视频一区| 在线视频欧美精品| 国产成人永久免费视频| 黄色毛片在线观看| 国产不卡在线播放| 国产欧美精品一区二区| 尤物视频在线观看国产| 偷偷www综合久久久久久久| 亚洲成av人影院在线观看| 国产精品久久久久9999小说| 久久不射影院| 亚洲欧美怡红院| 久久精品中文字幕一区二区三区| 97人妻精品一区二区三区动漫| 国产日韩欧美高清免费| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久无码| 日韩在线亚洲| 欧美高清dvd| 国产一区视频免费观看| bl视频在线免费观看| 国产精品久久福利| 青娱乐国产91| 日韩av免费观影| 成人国产精品免费观看视频| 成人黄色大片在线免费观看| 一级片免费在线播放| 伊人久久婷婷| 久久99精品久久久久久青青91| 蜜桃av免费在线观看| 亚洲午夜久久| 国产丝袜精品第一页| 精品人妻二区中文字幕| 欧美国产中文高清| 欧美美女bb生活片| 三级av免费观看| 91伊人久久| 色成人在线视频| 国产第一页视频| 亚洲精品永久免费视频| 五月婷婷色综合| 国产色一区二区三区| 色噜噜狠狠狠综合欧洲色8| 亚洲天堂网中文字| 亚洲欧美一二三| 成人短视频在线| 亚洲女同一区二区| 国产1区2区3区中文字幕| 免费av在线| 亚洲欧美区自拍先锋| 欧美精彩一区二区三区| 三级在线电影| 久久久国产精品不卡| 欧美福利一区二区三区| 理论视频在线| 国产精品美女久久福利网站| 制服国产精品| 亚洲奶水xxxx哺乳期| 亚洲一区二区三区四区的| www.国产在线视频| 国产在线天堂www网在线观看| 欧美日韩免费一区| 久久久久久三级| 亚洲日本中文| 精品国产凹凸成av人导航| 黄色污在线观看| 国产欧美日韩在线观看视频| 色yeye香蕉凹凸一区二区av| 91精品少妇一区二区三区蜜桃臀| 欧美一区91| 777777777亚洲妇女| 99超碰在线观看| 另类小说视频一区二区| 亚洲www永久成人夜色| 丰满少妇被猛烈进入| 91在线porny国产在线看| 欧美日韩国产综合在线| 麻豆视频网站在线观看| 亚洲午夜一区二区三区| 成人中文字幕av| 日韩欧美另类中文字幕| 亚洲开心激情网| 国产中文av在线| 午夜视频精品| 日韩av电影手机在线观看| 一级特黄aaa| 99久久国产综合色|国产精品| 欧日韩一区二区三区| 黄色一级大片在线免费看产| 精品日韩美女的视频高清| 成 人 黄 色 小说网站 s色| 91麻豆精品激情在线观看最新 | 国产福利精品一区二区三区| 18国产精品| 在线亚洲欧美视频| 国产精品第一页在线观看| 青青草伊人久久| 精品国产二区在线| 麻豆系列在线观看| 色婷婷久久久久swag精品 | 欧美 国产 综合| 97精品资源在线观看| 亚洲免费福利视频| 久久久夜色精品| 美国十次了思思久久精品导航| 国内精品国语自产拍在线观看| 日本高清视频在线观看| 懂色aⅴ精品一区二区三区蜜月| 中文字幕线观看| 国产不卡一二三区| 91产国在线观看动作片喷水| 国产福利小视频| 欧美国产日韩一二三区| 阿v天堂2017| 涩爱av色老久久精品偷偷鲁| 日韩在线欧美在线国产在线| 手机在线看片1024| av网站免费线看精品| 色哺乳xxxxhd奶水米仓惠香| av成人在线观看| 亚洲欧美在线看| 日韩欧美亚洲视频| av一本久道久久综合久久鬼色| www婷婷av久久久影片| 日日夜夜一区| 日日摸夜夜添一区| 秋霞av一区二区三区| 久久综合网色—综合色88| 麻豆tv在线播放| 大奶一区二区三区| 欧美极品少妇xxxxⅹ免费视频| 99国产精品久久久久久久成人| 中文文精品字幕一区二区| 日韩手机在线观看视频| 韩日一区二区三区| 日本电影亚洲天堂| 日本五码在线| 91福利在线观看| 一级特黄曰皮片视频| 三级影片在线观看欧美日韩一区二区| 欧美极品一区二区| 亚洲成人一区在线观看| 亚洲夜晚福利在线观看| 中文字幕av资源| 国产精品福利电影一区二区三区四区| 国模私拍视频在线观看| 小处雏高清一区二区三区| 91免费精品国偷自产在线| 菠萝菠萝蜜在线视频免费观看| 69精品人人人人| 九九久久免费视频| 成人av免费网站| 东京热加勒比无码少妇| 欧美美女视频| 91中文字幕一区| 国内在线免费视频| 日韩久久精品电影| 中文字幕av第一页| 亚洲三级免费观看| 男女性杂交内射妇女bbwxz| 在线亚洲精品| 日本成人三级| 96sao精品免费视频观看| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲 美腿 欧美 偷拍| 色爱区综合激月婷婷| 伊人久久久久久久久久久久久久| 国产精品538一区二区在线| 欧美图片激情小说| 精品国产91| 91日韩久久| 亚洲黄色中文字幕| 日韩在线观看av| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 免费在线观看av网址| 不卡视频一二三| 亚洲一区在线不卡| 伊人久久大香线蕉综合热线 | 亚洲熟女一区二区三区| 一本一道久久综合狠狠老精东影业| 欧美日韩一区二区视频在线 | 91麻豆精品国产自产在线观看一区| 精品肉丝脚一区二区三区| 久久久精品免费观看| 无人码人妻一区二区三区免费| 亚洲综合精品| 国产资源第一页| 欧美精美视频| 国产高清精品一区二区| 日韩经典一区| 国模精品系列视频| 亚洲1卡2卡3卡4卡乱码精品| 亚洲精品一区二区三区四区高清 | 伊人色综合一区二区三区影院视频| 神马久久桃色视频| 日韩电影在线观看完整版| 日韩一区二区三区在线视频| 男人天堂av在线播放| 一级女性全黄久久生活片免费| 成人国产精品久久久网站| 粉嫩久久99精品久久久久久夜| 日日碰狠狠躁久久躁婷婷| 欧美 日韩 国产 一区| 日本免费一区二区三区| 黄色网一区二区| 亚洲free嫩bbb| 91p九色成人| 青青草成人在线| a国产在线视频| 欧美日韩成人在线观看| 毛片免费不卡| 中文字幕在线亚洲| 国产精品影院在线| 亚洲精品一区二区三区婷婷月| www.av导航| 8v天堂国产在线一区二区| 无码人妻丰满熟妇区bbbbxxxx| 亚洲国产一二三| 欧美色图亚洲天堂| 亚洲三级在线观看| 欧美日韩午夜视频| 18欧美乱大交hd1984| 国产三级在线观看完整版| 久久精品人人爽人人爽| 中文字幕一二三四区| 99久久国产综合精品女不卡| 中文字幕精品视频在线| 成人黄页毛片网站| 亚洲av无一区二区三区久久| 激情综合亚洲精品| 亚洲成人天堂网| 另类小说一区二区三区| 中文字幕第88页| 麻豆精品国产传媒mv男同| 天天干天天综合| 麻豆91在线播放| 中文字幕1234区| 国产精品一区免费视频| 国产xxx在线观看| 国产v综合v亚洲欧| 在线观看你懂的视频| 国产成人亚洲综合色影视| 亚洲国产综合av| 狠狠色综合播放一区二区| mm131国产精品| 精彩视频一区二区| 日本女人性视频| 99这里都是精品| 久久久久亚洲av无码专区桃色| 久久精品视频网| 国产日韩精品中文字无码| 亚洲婷婷综合久久一本伊一区| 欧洲美女女同性互添| 尤物在线观看一区| 91精品国产乱码久久久张津瑜| 一本大道久久精品懂色aⅴ| 精品国产www| 日韩欧美一区二区免费| 噜噜噜久久,亚洲精品国产品| 日韩电影中文字幕| www视频在线观看免费| 久久久国产精品x99av| 金瓶狂野欧美性猛交xxxx | 69视频免费在线观看| 在线观看视频91| 国产日本精品视频| 精品亚洲aⅴ在线观看| 国产高清免费av在线| 久久夜色精品国产亚洲aⅴ| av电影免费在线看| 国产精品ⅴa在线观看h| 麻豆久久一区| 鲁丝片一区二区三区| 久久视频在线| 老太脱裤子让老头玩xxxxx| 日本欧美久久久久免费播放网| 日本中文字幕在线不卡| 91免费观看视频在线| 999精品在线视频| 精品国产91久久久久久老师| 夜夜躁日日躁狠狠久久av| 精品久久久久久久久久久久久久久久久| 日本天堂影院在线视频| www欧美日韩| 在线亚洲人成| 97自拍视频| 国内亚洲精品| 欧美,日韩,国产在线| 激情综合网av| 国精产品一区一区三区免费视频| 亚洲色图欧洲色图婷婷| 亚洲乱码国产乱码精品| 日韩视频一区二区在线观看| 欧美拍拍视频| 久久久久久久999| www.欧美| 水蜜桃亚洲精品| 亚洲精选91| 肉色超薄丝袜脚交| 国产欧美精品一区| 韩国av中文字幕| 欧美mv日韩mv| 黄色小网站在线观看| 日本久久久久久久久久久| 中文无码日韩欧| 国产一区一区三区| 美国毛片一区二区| 精品人妻互换一区二区三区| 一区二区三区资源| 91影院在线播放| 在线播放国产一区二区三区| 少妇在线看www| 国产女人水真多18毛片18精品 | 97成人免费视频| 一本色道久久88综合日韩精品| 精品极品在线| 国产伦精品一区二区三区免| 一本到12不卡视频在线dvd| 超碰在线公开97| 中文字幕不卡在线播放| 福利网址在线观看| 亚洲欧美综合v| 日本电影欧美片| 蜜桃av噜噜一区二区三| 一二三区精品| 91精品国产自产| 黄色成人在线免费| 亚洲av成人无码网天堂| 午夜精品免费视频| 日韩av中文字幕一区| 色综合久久久久无码专区| 成人精品小蝌蚪| 日韩欧美视频在线免费观看| 亚洲国产精品久久久久| 99thz桃花论族在线播放| 国产一区国产精品| 亚洲视频www| 加勒比一区二区| 在线视频一区二区三| 午夜视频成人| 亚洲v日韩v综合v精品v| 韩国在线视频一区| 日韩av手机在线播放| 日韩欧美中文在线| 成人在线免费公开观看视频| 国产精品中文字幕在线| 99久久精品网站| 亚洲欧美激情一区二区三区| 亚洲一区二区三区四区的| 性xxxx视频| 国产91免费看片| 国产精品国产三级国产在线观看| 中文字幕亚洲影院| 亚洲五月六月丁香激情| 日本激情视频网站| 国产成人一区二区三区电影| 日韩一区欧美| 欧美丰满熟妇bbb久久久| 欧美日韩美女在线观看| av中文天堂在线| 波多野结衣一区二区三区在线观看| 亚洲激情二区| 男女做爰猛烈刺激| 日韩一区二区视频在线观看| 日产福利视频在线观看| 天天人人精品| 国产1区2区3区精品美女| 欧美a视频在线观看| 日韩最新中文字幕电影免费看| 视频精品一区| 美女黄色片视频| 亚洲一区二区三区在线播放| 免费在线黄色网址| 亚洲一区二区中文字幕| 香蕉av777xxx色综合一区| av黄色免费在线观看| 亚洲大胆人体视频| 日本少妇一区| 日韩黄色片在线| av中文在线| 日本在线精品视频| 综合在线一区| 亚洲理论片在线观看| 欧美一区二区视频在线观看2020| 亚洲风情在线资源| 精品国产无码在线| 久久久久久久性| 国产综合无码一区二区色蜜蜜| 国产精品久久久久久久久久ktv |