Skip to content
Navigation Menu
Sign in
Appearance settings
Platform
AI CODE CREATION
GitHub Copilot
Write better code with AI
GitHub Copilot app
Direct agents from issue to merge
MCP Registry
Integrate external tools
DEVELOPER WORKFLOWS
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Code Quality
Enforce quality at merge
APPLICATION SECURITY
GitHub Advanced Security
Find and fix vulnerabilities
Code security
Secure your code as you build
Secret protection
Stop leaks before they start
EXPLORE
Why GitHub
Documentation
Blog
Changelog
Marketplace
View all features
Solutions
BY COMPANY SIZE
Enterprises
Small and medium teams
Startups
Nonprofits
BY USE CASE
App Modernization
DevSecOps
DevOps
CI/CD
View all use cases
BY INDUSTRY
Healthcare
Financial services
Manufacturing
Government
View all industries
View all solutions
Resources
EXPLORE BY TOPIC
AI
Software Development
DevOps
Security
View all topics
EXPLORE BY TYPE
Customer stories
Events & webinars
Ebooks & reports
Business insights
GitHub Skills
SUPPORT & SERVICES
Documentation
Customer support
Community forum
Trust center
Partners
View all resources
Open Source
COMMUNITY
GitHub Sponsors
Fund open source developers
PROGRAMS
Security Lab
Maintainer Community
Accelerator
GitHub Stars
Archive Program
REPOSITORIES
Topics
Trending
Collections
Enterprise
ENTERPRISE SOLUTIONS
Enterprise platform
AI-powered developer platform
AVAILABLE ADD-ONS
GitHub Advanced Security
Enterprise-grade security features
Copilot for Business
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Type
/
to search
Sign in
Sign up
Appearance settings
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
taskset
/
kernel_debug_notes
Public
Notifications
You must be signed in to change notification settings
Fork
11
Star
22
Code
Issues
1
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Files
Expand file tree
master
Breadcrumbs
kernel_debug_notes
/
diff-between-sched_setscheduler-and-pthread_attr_setschedpolicy
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
22 lines (17 loc) · 1.68 KB
master
Breadcrumbs
kernel_debug_notes
/
diff-between-sched_setscheduler-and-pthread_attr_setschedpolicy
Copy path
Top
File metadata and controls
Code
Blame
22 lines (17 loc) · 1.68 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
遇到的困扰是:
task_wrapper中用sched_setscheduler设置线程调度策略为SCHED_FIFO,
但在后继的函数中用pthread_attr_getschedpolicy获取线程调度策略,获取的却是SCHED_OTHER,
进而导致错误。
---》
1,sched_setscheduler/sched_getscheduler 是操作系统提供的API,可以用它查询、设置调度策略。
2,pthread_attr_setschedpolicy/pthread_attr_getschedpolicy 是glibc提供的函数,设置/查询 pthread_attr结构体的schedpolicy变量,这时候只是schedpolicy变量的值有变化,线程的调度策略并没有生效:
In order for the policy setting made by pthread_attr_setschedpolicy() to have effect when calling pthread_create(3), the caller must use
pthread_attr_setinheritsched(3) to set the inherit-scheduler attribute of the attributes object attr to PTHREAD_EXPLICIT_SCHED.
还需要调用pthread_attr_setinheritsched、pthread_create,新创建出来的线程才会具有新的调度策略。
而pthread_create 函数,实际上也是调用sched_setscheduler系统调用来设置新的调度策略的。
可以把pthread_attr_setschedpolicy/pthread_attr_getschedpolicy 看做是封装了sched_setscheduler/sched_getscheduler。
对于下面的问题:
一个函数中用sched_setscheduler设置线程调度策略为SCHED_FIFO
----》sched_setscheduler 系统调用直接设置调度策略,不会更改c库pthread_attr结构体的schedpolicy变量。
但在另一个函数中用pthread_attr_getschedpolicy获取线程调度策略,获取的却是SCHED_OTHER
----》因为c库pthread_attr结构体的schedpolicy变量没有变化,pthread_attr_getschedpolicy获取的就和线程实际的调度策略不一样了。
You can’t perform that action at this time.