小编Adi*_* Ya的帖子

线程问题

getvariana:tpp.c:63:__ pthread_tpp_change_priority:断言`new_prio == -1 || (new_prio> = __sched_fifo_min_prio && new_prio <= __sched_fifo_max_prio)'失败.

大家好,

我试图重新运行一个创建5个线程的程序,在pthread_join()之后,我做了一个返回,基于此,我重新运行整个程序,即它在while(1)循环中.

当我第二次运行程序时,我会看到一个错误,如上所示.我无法追查它的起源.任何人都可以解释为什么会导致这个错误?

仅供参考:我不使用任何互斥锁或信号量.我等待线程加入,之后我重新运行整个程序.这与竞争条件有关吗?我假设,当我等待所有5个线程加入时,只有这样我才能离开pthread

main
{
    while(1)
    {
         test();
    }
}//main

test()
{
    for( i = 0; i < 5; i++ )
        pthread_create( &th[i], NULL, tfunc, &some_struct);

    for( i = 0; i < 5, i++ )
        pthread_join( th[i], NULL);
}

void * tfunc( void * ptr )
{
    // waiting for a callback function to set a global counter to a value
    // sleep until then
    if( g_count …
Run Code Online (Sandbox Code Playgroud)

c pthreads

7
推荐指数
2
解决办法
7242
查看次数

C标头包含防护,仅在头文件中使用,但不在.c文件中使用.为什么?

我已经在头文件中使用了一段时间的保护,我理解为什么使用它们的唯一原因是在编译时启用单个包含此内容(包含保护的头文件).

我想知道是否有任何其他原因使用标题保护,为什么它们没有在.c文件中使用,如果保护用于.c文件会发生什么?

答.从以下回复中收集.

通常,所有定义都进入.c文件,头文件(.h文件)包含所有声明.包含.c文件不是一个好习惯.

为了在编译特定于翻译单元的过程中只与一个包含的.c文件可用的声明相关联(因此,如果有两个或更多的库需要链接;即,我们有两个或更多翻译单位); 标题保护有助于包含头文件ONLY ONCE.

这是因为预编译器阶段甚至在编译文件以获取对象(.o扩展名)文件之前.预处理器阶段替换整个宏并包含相关数据,这些数据只允许包含.h文件一次.

c header include-guards

4
推荐指数
1
解决办法
3088
查看次数

为什么kthread有pid 2而systemd有PID 1?

在systemd环境中,当我执行ps -auxf时,我看到kthread的PID为2,而systemd分配了PID 1.

那么,谁将PID 2分配给kthread,为什么当kthread被称为systemd时它会获得PID 2 ?

linux kernel init systemd

3
推荐指数
1
解决办法
1918
查看次数

标签 统计

c ×2

header ×1

include-guards ×1

init ×1

kernel ×1

linux ×1

pthreads ×1

systemd ×1