多线程SCHED_RR实时调度方式的疑问

勇敢小鱼 2016-09-23 10:49:20
问题1 :
假如现在有3个SCHED_RR的threads, 静态priority设置成一样都是10,若不考虑阻塞的情况,那么调度的时候是如何调度的?
是这三个threads依次执行满一个时间片(假如是100ms)吗?不会在100ms内被抢占?
问题2:
如果问题1中存在一个阻塞thread,那么当这个thread唤醒后,会立即被调度,还是排队等待当前执行的thread结束它的时间片再执行?也就是说阻塞thread唤醒后是立即执行还是排队等待?
谢谢!!
...全文
397 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
勇敢小鱼 2016-09-26
  • 打赏
  • 举报
回复
顶一下。。。。
线程与智能指针 C++线程与智能指针 ⽂章⽬录 线线程,有时被称为轻量进程,是程序执⾏的最⼩单元。 C++11线程 #include 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 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 using namespace std; queue q; void *pop(void* args) { //线程未同步导致的多线程安

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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