pthreads_create()返回非零值
pthreads_create () returns non-zero value?
我在调用 pthread_create()
之前创建了一个函数来设置 pthread
的属性。但是,pthread_create()
由于返回非零值而失败。我不确定我的功能设置的属性是什么问题。我正在用Ubuntu 16.04 LTS
上的g++
编译程序。
要编译和执行我正在使用:
g++ example.cpp -lpthread
./a.out
-
typedef void *(*DART_TASK_T)(void *);
typedef void (*DART_CALLBACK_T)(int);
static struct taskcontrolblock_s sysTask[MAX_DARTOS_THREADS];
static unsigned max_task_id_registered = 0;
static std :: bitset<sizeInBytes(MAX_DARTOS_THREADS)> taskIDs;
struct taskcontrolblock_s {
const char *name;
DART_TASK_T routine;
DART_CALLBACK_T cleanup_callback;
void *arg;
unsigned arg_len;
union {
uint8_t flags;
struct {
//uint8_t created:1;
//uint8_t running:1;
//uint8_t blocked:1;
//uint8_t suspended:1;
//uint8_t killed:1;
//uint8_t completed:1;
//uint8_t;
};
};
int priority;
pthread_t thread;
}__attribute__((packed));
static int dispatch_task(int tid)
{
if (!taskIDs[tid]) //
return -1;
pthread_attr_t attr;
struct sched_param param;
param.sched_priority = sysTask[tid].priority;
int policy = SCHED_RR;
if (pthread_attr_init(&attr))
return -1;
if (pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED))
return -1;
if (pthread_attr_setschedpolicy(&attr, policy))
return -1;
if (pthread_attr_setschedparam(&attr, ¶m))
return -1;
if (pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM))
return -1;
if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
return -1;
if (pthread_create(&sysTask[tid].thread, &attr, sysTask[tid].routine, sysTask[tid].arg))
return -1;
pthread_attr_destroy(&attr);
return 0;
}
编辑:
调用perror()
将字符阵列Operation not permitted
打印到stderr
。
用根特权运行程序解决了问题。
答案的第一部分是要使用SCHED_RR
,您必须为用户使用CAP_SYS_NICE
。如您所指出的,作为root
的运行使其正常工作。但是,只要您拥有CAP_SYS_NICE
"功能",就可以作为任何用户运行。一种方法是使用setcap
,此处解释:https://stackoverflow.com/a/37528755/4323
您将需要运行sudo setcap
的能力。
相关文章:
- 在索引0为0的数组中查找非零最小值C++
- 用非零值初始化void指针的正确(或最安全)方法
- 获取 2 暗淡 cv::Mat 的非零元素的值
- MEMCMP以相同(零值)位字段结构返回非零
- 特征稀疏布尔矩阵是否存储非零值
- C++从函数返回的 2D 数组,错误:以非零状态退出
- pthreads_create()返回非零值
- C 排序升序非零值
- MySQL 使用一组列中的数据更新列,以非零值为准
- 如何在编译时将整数模板参数修改为非零值
- std::current_exception 是否应该从类析构函数中的 catch 块返回非空值
- 比较/计数非零返回比预期更大的值
- system() 在作为 CGI 调用时总是返回非零
- 如何使 cuda-memcheck 在出现泄漏检查错误时返回非零
- 使用字符串流从空字符串转换为浮点值会导致非零值
- 编译器是否应该正确地将布尔中的任意非零值解释为true
- 如何在 c++ 中获取向量中第一个非零值的索引<int>
- 将双数组初始化为非零值
- 如何保护数组定义,防止使用非零值进行不完整的初始化
- 如何强制编译器为未初始化的变量设置非零值