用std::thread创建的线程能否试用pthread的读写锁

qq_40162781 2021-02-24 02:47:58

用std::thread创建的线程能否试用pthread的读写锁。

因为目前用的c++标准还不支持读写锁

...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2021-02-24
  • 打赏
  • 举报
回复
人家未必关注代码的完全可移植性。
引用 2 楼 qq_40162781 的回复:
引用 1 楼 taodm 的回复:
应该是使用std的标准锁来自己实现读写锁吧。
感谢,我会使用这种方式。但还是好奇能不能与与pthread的接口混用。我想起在<c++并发编程实战>中作者用了boost库的读写锁。所以应该是能混用的吧?
  • 打赏
  • 举报
回复
应该能混用,std::thread在linux上的实现就依赖pthread库
qq_40162781 2021-02-24
  • 打赏
  • 举报
回复
引用 1 楼 taodm 的回复:
应该是使用std的标准锁来自己实现读写锁吧。
感谢,我会使用这种方式。但还是好奇能不能与与pthread的接口混用。我想起在<c++并发编程实战>中作者用了boost库的读写锁。所以应该是能混用的吧?
taodm 2021-02-24
  • 打赏
  • 举报
回复
应该是使用std的标准锁来自己实现读写锁吧。
线程与智能指针 C++线程与智能指针 ⽂章⽬录 线程 线程,有时被称为轻量进程,是程序执⾏的最⼩单元。 C++11线程 #include <thread> void task(int i) { cout << "task:" << i << endl; } thread t1(task,100); //等待线程结束再继续执⾏ t1.join(); POSIX线程 POSIX 可移植操作系统接⼝,标准定义了操作系统应该为应⽤程序提供的接⼝标准 Windows上使⽤ 配置: cmake_minimum_required (VERSION 3.8) include_directories("XXX/pthreads-w32-2-9-1-release/Pre-built.2/include") #设置变量为x64 or x86 if(CMAKE_CL_64) set(platform x64) else() set(platform x86) endif() link_directories("XXX/pthreads-w32-2-9-1-release/Pre-built.2/lib/${platform}") #如果出现 "timespec":"struct" 类型重定义 设置 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC") # 将源添加到此项⽬的可执⾏⽂件。 add_executable (lsn6example "lsn6_example.cpp" "lsn6_example.h") target_link_libraries(lsn6example pthreadVC2) 32位拷贝pthreadVC2.dll 到windows/syswow64⽬录 64位拷贝pthreadVC2.dll 到windows/system32⽬录 #include thread.h> void *pthreadTask(void* args) { int* i = static_cast(args); cout << "posix线程:" << *i << endl; return 0; } pthread_t pid; int pi = 100; pthread_create(&pid, 0, pthreadTask, &pi); //等待线程的结束 pthread_join(pid,0); 线程属性 线程具有属性,⽤ pthread_attr_t 表⽰ pthread_attr_t attr; //初始化 attr中为操作系统实现⽀持的线程所有属性的默认值 pthread_attr_init(&attr); pthread_attr_destroy(&attr); 分离线程 线程创建默认是⾮分离的,当pthread_join()函数返回时,创建线程终⽌,释放⾃⼰占⽤的系统资源 分离线程不能被其他线程等待,pthread_join⽆效,线程⾃⼰玩⾃⼰的。 //设置是否为分离线程 //PTHREAD_CREATE_DETACHED 分离 //PTHREAD_CREATE_JOINABLE ⾮分离 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); 调度策略与优先级 Windows ⽆法设置成功 //设置调度策略 //返回0 设置成功 pthread_attr_setschedpolicy(&attr, SCHED_FIFO); // SCHED_FIFO // 实时调度策略,先到先服务 ⼀旦占⽤cpu则⼀直运⾏。⼀直运⾏直到有更⾼优先级任务到达或⾃⼰放弃。 // SCHED_RR // 实时调度策略,时间轮转 系统分配⼀个时间段,在时间段内执⾏本线程 //设置优先级 //获得对应策略的最⼩、最⼤优先级 int max = sched_get_priority_max(SCHED_FIFO); int min = sched_get_priority_min(SCHED_FIFO); sched_param param; param.sched_priority = max; pthread_attr_setschedparam(&attr, ¶m); 线程同步 多线程同时读写同⼀份共享资源的时候,可能会引起冲突。需要引⼊线程"同步"机制,即各位线程之间有序地对共享资源进⾏操 作。 #include thread.h> using namespace std; queue q; void *pop(void* args) { //线程未同步导致的多线程

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧