日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

9 C++ Boost 多线程,线程同步

發布時間:2023/12/4 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9 C++ Boost 多线程,线程同步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



線程的創建?boost_thread,boost_system 多線程的創建 線程的參數傳遞 線程的創建方式 線程的join 加入join,回收線程線程中斷 線程中斷2, 線程組 boost?線程的死鎖 boost?線程遞歸鎖 線程互斥鎖,線程同步 unique_lock?鎖,離開作用域自動釋放 unique_lock?鎖?示例?2,可以顯式的釋放鎖 boost?1次初始化 boost?條件變量 boost?線程鎖,一個賬戶往另外一個賬戶轉錢案例 boost?upgrade_lock











知識背景:

理解什么是線程,什么是進程,區別是什么,如何使用多進程多線程




線程的創建 boost_thread,boost_system

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std;void?fun() {cout?<<?"Hello?Boost?threads?!"?<<?endl; }int?main()? {boost::thread?t1(fun);t1.join();return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? Hello?Boost?threads?! chunli@Linux:~/boost$


多線程的創建

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std;void?fun1(){cout?<<?"Hello?Boost?threads?1!"?<<?endl;} void?fun2(){cout?<<?"Hello?Boost?threads?2!"?<<?endl;} void?fun3(){cout?<<?"Hello?Boost?threads?3!"?<<?endl;}int?main()? {boost::thread?t1(fun1); t1.join();boost::thread?t2(fun2); t2.join();boost::thread?t3(fun3); t3.join();return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? Hello?Boost?threads?1! Hello?Boost?threads?2! Hello?Boost?threads?3! chunli@Linux:~/boost$



線程的參數傳遞

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; void?fun1(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;} void?fun2(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;} void?fun3(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;} int?main()? {boost::thread?t1(fun1,1); t1.join();boost::thread?t2(fun2,2); t2.join();boost::thread?t3(fun3,3); t3.join();return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 threads?id?2 threads?id?3 chunli@Linux:~/boost$



線程的創建方式

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std;void?fun1(const?int?&id) {cout?<<?"threads?id?"<<id?<<?endl; }struct?MyThread {void?operator()(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;}void?fun(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;} };int?main()? {boost::thread?t1(fun1,1);//自由函數 t1.join();MyThread?mythread; boost::thread?t2(mythread,2);//函數對象???t2.join();boost::thread?t3(&MyThread::fun,mythread,3);?//成員函數??t3.join();boost::thread?t4(MyThread(),4); //臨時對象t4.join();boost::thread?t5(boost::ref(mythread),5);//對象引用 t5.join();return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 threads?id?2 threads?id?3 threads?id?4 threads?id?5 chunli@Linux:~/boost$




線程的join

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std;void?fun1(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;}int?main()? {boost::thread?t1(fun1,1); //t1.join();cout?<<?"main?end!"?<<?endl;return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end! chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end!threads?id?1chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end! threads?id?1 chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end! threads?id?1chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end! threads?id?1 chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? main?end! threads?id?1 chunli@Linux:~/boost$? 可以看出,如果沒有join的等待,結果是不可預期的.



加入join,回收線程

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std;void?fun1(const?int?&id){cout?<<?"threads?id?"<<id?<<?endl;}int?main()? {boost::thread?t1(fun1,1); t1.join();cout?<<?"main?end!"?<<?endl;return?0; } chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 main?end! chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 main?end! chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 main?end! chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? threads?id?1 main?end! chunli@Linux:~/boost$




線程中斷

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;void?f1(const?int&?id)? {cout?<<?"thread?#"?<<?id?<<?":?started"?<<?endl;boost::system_time?const?timeout?=?boost::get_system_time()+?boost::posix_time::seconds(3);thread::sleep(timeout);//sleep不會放棄時間片cout?<<?"thread?#"?<<?id?<<?":?ended"?<<?endl; }void?f2(const?int&?id)? {cout?<<?"thread?#"?<<?id?<<?":?started"?<<?endl;thread::yield();//預定義中斷點.主動放棄時間片cout?<<?"thread?#"?<<?id?<<?":?ended"?<<?endl; }void?f3(const?int&?id)? {cout?<<?"thread?#"?<<?id?<<?":?started"?<<?endl;boost::this_thread::interruption_point();//預定義中斷點cout?<<?"thread?#"?<<?id?<<?":?ended"?<<?endl; }int?main()? {thread?t1(f1,?1); t1.interrupt();thread?t2(f2,?2);thread?t3(f3,?3); t3.interrupt();t1.join();t2.join();t3.join(); }chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? thread?#2:?started thread?#1:?started thread?#3:?started thread?#2:?ended chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? thread?#1:?started thread?#3:?started thread?#2:?started thread?#2:?ended chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? thread?#thread?#2:?started1:?started thread?#3:?startedthread?#2:?ended chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? thread?#3:?started thread?#1:?started thread?#2:?started thread?#2:?ended chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? thread?#2:?started thread?#3:?started thread?#thread?#2:?ended 1:?started chunli@Linux:~/boost$? 只有2線程不會被打斷



線程中斷2,

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;void?print(const?int&?id)? {boost::this_thread::disable_interruption?di;//創建一個不可被打斷的對象cout?<<?boost::this_thread::interruption_enabled()?<<?endl;cout?<<?"thread?#"?<<?id?<<?":?";//boost::this_thread::sleep(boost::posix_time::seconds(2));boost::system_time?const?timeout?=?boost::get_system_time()?+?boost::posix_time::seconds(2);thread::sleep(timeout);for?(int?i?=?1;?i?<?11;?++i){cout?<<?i?<<?'?';}cout?<<?endl;boost::this_thread::restore_interruption?ri(di);//到這里,對象不可被打斷cout?<<?boost::this_thread::interruption_enabled()?<<?endl;//實際上,是可以被打斷 }int?main()? {//線程還沒有運行結束,叫被打斷thread?t1(print,?1);thread?t2(print,?2);thread?t3(print,?3); t3.interrupt();t1.join();t2.join();t3.join(); }chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? 0 thread?#1:?0 thread?#3:?0 thread?#2:?1?2?3?4?5?6?7?8?9?10? 1 1?2?3?4?5?6?7?8?9?10? 1 1?2?3?4?5?6?7?8?9?10? 1 chunli@Linux:~/boost$?g++?main.cpp?-l?boost_thread?-l?boost_system?&&?./a.out? 0 thread?#1:?0 thread?#2:?0 thread?#3:?1?2?3?4?5?6?7?8?9?10? 1 1?2?3?4?5?6?7?8?9?10? 1 1?2?3?4?5?6?7?8?9?10? 1 chunli@Linux:~/boost$




線程組

chunli@Linux:~/桌面/qt_pro/01/untitled$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread; void?f1(){????cout?<<?"fun1?"?<<?endl;} void?f2(){????cout?<<?"fun2?"?<<?endl;}int?main() {boost::thread_group?group;for(int?i?=?0;i<3;++i){group.create_thread(f1);}group.add_thread(new?boost::thread(f2));cout<<group.size()<<endl;group.join_all(); }chunli@Linux:~/桌面/qt_pro/01/untitled$?g++?main.cpp?-lboost_thread?-lboost_system?-Wall?&&?./a.out? fun1?4 fun1? fun2? fun1?chunli@Linux:~/桌面/qt_pro/01/untitled$?g++?main.cpp?-lboost_thread?-lboost_system?-Wall?&&?./a.out? fun1? fun1? fun1? 4 fun2? chunli@Linux:~/桌面/qt_pro/01/untitled$



boost 線程的死鎖

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;boost::mutex?m;void?function1() {m.lock();cout?<<?"function?1?\n";m.unlock(); }void?function2() {m.lock();cout?<<?"function?2?\n";function1();m.unlock(); }int?main() {thread?t1(function1);???t1.join();thread?t2(function2);???t2.join(); }chunli@Linux:~/boost$?g++?main.cpp?-lboost_thread?-lboost_system&&?./a.out? function?1? function?2? ^C chunli@Linux:~/boost$




boost 線程遞歸鎖

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;boost::recursive_mutex?m;void?function1() {m.lock();cout?<<?"function?1?\n";m.unlock(); }void?function2() {m.lock();cout?<<?"function?2?\n";function1();m.unlock(); }int?main() {thread?t1(function1);???t1.join();thread?t2(function2);???t2.join(); }chunli@Linux:~/boost$?g++?main.cpp?-lboost_thread?-lboost_system?-lpthread?&&?./a.out? function?1? function?2? function?1? chunli@Linux:~/boost$



線程互斥鎖,線程同步

boost::mutex?m;void?function1(int?id) {m.lock();cout?<<"thread?#"<<id<<":";for(int?i=0;i<15;i++)cout?<<?i<<'?';cout?<<?endl;m.unlock(); }int?main() {thread?t1(function1,1);???t1.join();thread?t2(function1,2);???t2.join();thread?t3(function1,3);???t3.join();thread?t4(function1,4);???t4.join();thread?t5(function1,5);???t5.join();thread?t6(function1,6);???t6.join();}chunli@Linux:~/boost$?g++?main.cpp?-lboost_thread?-lboost_system?-lpthread?&&?./a.out? thread?#1:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? thread?#2:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? thread?#3:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? thread?#4:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? thread?#5:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? thread?#6:0?1?2?3?4?5?6?7?8?9?10?11?12?13?14? chunli@Linux:~/boost$



unique_lock 鎖,離開作用域自動釋放

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<list>#include?<boost/thread.hpp> using?namespace?std; using?boost::thread;boost::mutex?m; int?k?=?0;void?decrement() {boost::unique_lock<boost::mutex>?lock(m);for(int?i?=?0;i<=100;++i){k-=i;}cout?<<?"after?decrement?k="<<k?<<?endl; }void?increment() {boost::unique_lock<boost::mutex>?lock(m);for(int?i?=?0;i<=100;++i){k+=i;}cout?<<?"after?increment?k="<<k?<<?endl; }int?main() {boost::thread?t1(increment);????t1.join();boost::thread?t2(decrement);????t2.join();}chunli@Linux:~/boost$?g++?main.cpp?-lboost_thread?-lboost_system?-lpthread?&&?./a.out? after?increment?k=5050 after?decrement?k=0 chunli@Linux:~/boost$



unique_lock 鎖 示例 2,可以顯式的釋放鎖

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<vector> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;boost::mutex?m;void?updateString() {boost::unique_lock<boost::mutex>?lock(m);//locklock.unlock();//unlocklock.lock(); }int?main() {thread?t1(updateString);????t1.join();thread?t2(updateString);????t2.join(); }chunli@Linux:~/boost$?g++?main.cpp?-lboost_thread?-lboost_system?-lpthread?&&?./a.out? chunli@Linux:~/boost$




boost 1次初始化

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp>using?namespace?std; using?boost::thread; boost::once_flag?once?=?BOOST_ONCE_INIT;?//?注意這個操作不要遺漏了 void?func()?{cout?<<?"Will?be?called?but?one?time!"?<<?endl; } void?threadFunc()?{//????func();boost::call_once(&func,?once); }int?main()?{boost::thread_group?threads;for?(int?i?=?0;?i?<?5;?++i)threads.create_thread(&threadFunc);threads.join_all(); }chunli@Linux:~/boost$?g++?main.cpp??-lboost_thread?-lboost_system?&&?./a.out? Will?be?called?but?one?time! chunli@Linux:~/boost$




boost 條件變量

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp> using?namespace?std; using?boost::thread;boost::condition_variable?cond;?//?關聯多個線程的條件變量 boost::mutex?m;?//?保護共享資源?k?的互斥體 int?k?=?0;?//?共享資源void?f1(const?int&?id)? {boost::unique_lock<boost::mutex>?lock(m);while?(k?<?5)?{cout?<<?"thread?#"?<<?id?<<?":?k?<?5,?waiting?..."?<<?endl;cond.wait(lock);?//?#1}cout?<<?"thread?#"?<<?id?<<?":?now?k?>=?5,?printing?..."?<<?endl; }void?f2(const?int&?id)? {boost::unique_lock<boost::mutex>?lock(m);cout?<<?"thread?#"?<<?id?<<?":?k?will?be?changed?..."?<<?endl;k?+=?5;cond.notify_all();?//?#2?不需lock }int?main()?{//?如果f2()中是?cond.notify_one(),結果?boost::thread?t1(f1,?1);boost::thread?t2(f1,?2);boost::thread?t3(f2,?100);t1.join();t2.join();t3.join(); }chunli@Linux:~/boost$?g++?main.cpp??-lboost_thread?-lboost_system?&&?./a.out? thread?#1:?k?<?5,?waiting?... thread?#2:?k?<?5,?waiting?... thread?#100:?k?will?be?changed?... thread?#1:?now?k?>=?5,?printing?... thread?#2:?now?k?>=?5,?printing?... chunli@Linux:~/boost$



boost 線程鎖,一個賬戶往另外一個賬戶轉錢案例

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp>using?namespace?std; using?boost::thread;class?Account?{boost::mutex?m;double?balance;public:Account()?:balance()?{}Account(const?double&?bal)?:balance(bal)?{}double?getBalance()?const?{return?balance;}friend?void?transfer(Account&?from,?Account&?to,?double?amount); };version?3:?OK?(使用lock()?和?unique_lock) //void?transfer(Account&?from,?Account&?to,?double?amount)?{ //????boost::lock(from.m,?to.m); //????boost::unique_lock<boost::mutex>?lockFrom(from.m,?boost::adopt_lock); //????boost::unique_lock<boost::mutex>?lockTo(to.m,?boost::adopt_lock); // //????from.balance?-=?amount; //????to.balance?+=?amount; //}//?version?2:?OK?(使用lock()?和?lock_guard) void?transfer(Account&?from,?Account&?to,?double?amount)?{boost::lock(from.m,?to.m);boost::lock_guard<boost::mutex>?lockFrom(from.m,?boost::adopt_lock);boost::this_thread::sleep(boost::posix_time::seconds(1));boost::lock_guard<boost::mutex>?lockTo(to.m,?boost::adopt_lock);from.balance?-=?amount;to.balance?+=?amount; }//?version?1:?可能造成死鎖 //void?transfer(Account&?from,?Account&?to,?double?amount)?{ //????boost::lock_guard<boost::mutex>?lockFrom(from.m);?//?#1 //????boost::this_thread::sleep(boost::posix_time::seconds(1)); //????boost::lock_guard<boost::mutex>?lockTo(to.m);?//?#2 //????from.balance?-=?amount; //????to.balance?+=?amount; //}int?main()?{Account?a1(1200.00);Account?a2(300.00);boost::thread?t1(transfer,?boost::ref(a1),?boost::ref(a2),?134.85);boost::thread?t2(transfer,?boost::ref(a2),?boost::ref(a1),?100.30);t1.join();t2.join();cout?<<?"Balance?of?a1:?"?<<?a1.getBalance()?<<?endl;cout?<<?"Balance?of?a2:?"?<<?a2.getBalance()?<<?endl; }chunli@Linux:~/boost$?g++?main.cpp??-lboost_thread?-lboost_system?-lpthread?&&?./a.out? Balance?of?a1:?1165.45 Balance?of?a2:?334.55 chunli@Linux:~/boost$




boost upgrade_lock

chunli@Linux:~/boost$?cat?main.cpp? #include?<iostream> #include?<boost/thread.hpp>using?namespace?std; using?boost::thread; boost::shared_mutex?m; int?k?=?1;void?f(int?id)?{boost::upgrade_lock<boost::shared_mutex>?lock(m);cout?<<?"thread?#"?<<?id?<<?":?"?<<?k?<<?endl;if?(k?<?6)?{//?boost::unique_lock<boost::shared_mutex>?lock2(boost::move(lock));?//?alternate:boost::upgrade_to_unique_lock<boost::shared_mutex>?lock2(lock);k?+=?3;} }int?main()?{boost::thread?t1(f,?1);boost::thread?t2(f,?2);boost::thread?t3(f,?3);t1.join();t2.join();t3.join(); }chunli@Linux:~/boost$?g++?main.cpp??-lboost_thread?-lboost_system?-lpthread?&&?./a.out? thread?#2:?1 thread?#1:?4 thread?#3:?7 chunli@Linux:~/boost$




轉載于:https://blog.51cto.com/990487026/1886403

總結

以上是生活随笔為你收集整理的9 C++ Boost 多线程,线程同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91 免费看片 | 精品人妻码一区二区三区红楼视频 | 黄色无遮挡网站 | 日本高清久久 | 亚洲伊人久久综合 | 一级黄大片 | 一区二区三区国产精品视频 | 久久国产精品-国产精品 | 国产美女无遮挡免费 | www.日韩.com | 国产99久久九九精品无码免费 | 97人人在线 | 名校风暴在线观看免费高清完整 | 色久天 | 青青在线播放 | 色婷婷av一区二区三 | 91狠狠干 | 国产91精品久久久久 | 国产一级免费大片 | 国产成人精品视频在线观看 | 97免费在线观看 | 亚洲乱码国产乱码精品精软件 | 欧美日韩在线视频一区 | 成人网站免费观看入口 | 玖玖爱av| 国产高潮国产高潮久久久91 | 国产免费视频一区二区三区 | 成人精品久久久午夜福利 | 亚洲三级在线视频 | 午夜精品福利一区二区三区蜜桃 | 456亚洲视频 | 日韩欧美一区二区三区免费观看 | 日本一区二区三区久久久久 | 国产精品一区一区三区 | a猛片 | 91丨九色丨黑人外教 | 色欲久久久天天天综合网精品 | 波多野结衣av电影 | 日日操夜夜操天天操 | 国产真实乱 | 少妇无码一区二区三区免费 | 骑骑上司妻电影 | 日本a√在线观看 | av视屏在线 | 免费日皮视频 | 久久伊人免费 | 亚洲爽爽 | 国产在线三区 | 日韩视频一区二区三区在线播放免费观看 | 免费看黄在线看 | 国产美女流白浆 | 在线观看黄色网 | 人妻少妇无码精品视频区 | 国产免费一区二区三区三州老师 | 在线观看国产小视频 | 欧美视频久久久 | 91精品国产综合久久精品 | av中文字幕第一页 | 中文资源在线观看 | 国产一级做a | 真实的国产乱xxxx在线91 | av黄色在线观看 | 九热在线视频 | 欧美肥老妇视频九色 | 亚洲精品免费在线播放 | 美腿丝袜一区二区三区 | 亚洲中文字幕在线观看 | 国产欧美日韩在线播放 | 2021天天操| 亚洲精品二区三区 | 香蕉视频18 | 国产一区二区三区四区五区 | 韩国女同性做爰三级 | 黄色资源在线观看 | 激情综合久久 | 麻豆视频精品 | 日韩影院在线 | 菊肠扩张playh | 亚洲第一综合网 | 粉嫩av一区二区三区天美传媒 | 亚洲欧美综合另类 | 日本a一级片 | 日韩三级视频 | 免费在线亚洲 | 日本高清不卡在线观看 | 爱操视频 | 亚洲欧美另类日本 | bt天堂新版中文在线地址 | 97久久人人超碰caoprom欧美 | 日韩电影在线一区二区 | 天天夜夜草 | 中文理论片 | 99热com| 99日精品| 久久久久噜噜噜亚洲熟女综合 | 国产欧美一级片 | 四虎在线视频 | 久久久午夜电影 | 亚洲毛片在线免费观看 |