linux程序运行问题解决集合

本文依据目前工作场景中程序运行出现的错误罗列至此,后续持续更新。


(1) Thread 1 "wow_base_test" received signal SIGILL, Illegal instruction.

错误追踪

(gdb) backtrace
#0  __lll_unlock_elision (lock=0x7fffffffe250, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:29
#1  0x00007ffff7fbb63b in wow_mutex_unlock (lock=0x7fffffffe250) at /home/wow/open/wow-iot7/wow_base/src/system/wow_lock.c:125
#2  0x000055555555abda in test_lock_mutex () at /home/wow/open/wow-iot7/wow_base/test/system/suit_lock.c:155
#3  0x000055555555ae7a in suit_lock () at /home/wow/open/wow-iot7/wow_base/test/system/suit_lock.c:217
#4  0x000055555555891d in greatest_run_suite (suite_cb=0x55555555adc7 <suit_lock>, suite_name=0x5555555603a5 "suit_lock")
    at /home/wow/open/wow-iot7/wow_base/test/main.c:27
#5  0x0000555555559551 in main (argc=1, argv=0x7fffffffe3d8) at /home/wow/open/wow-iot7/wow_base/test/main.c:41

代码段:

TEST test_lock_mutex(void)
{
    printf(MOD_TAG"suit_lock----test_lock_mutex\n");

    mutex_lock_t lock;    

    gi_threadFlag = 1;
    
    wow_thread_create(MOD_TAG,mutex_lock_thread,&lock);
    wow_thread_create(MOD_TAG,mutex_unlock_thread,&lock);

    sleep(10);
    gi_threadFlag = 0;
    wow_mutex_unlock(&lock);    
    sleep(3);
    
    ///<这里  !!不要去解锁一个未被加锁的mutex锁
    wow_mutex_unlock(&lock);
    
    PASS();
}

线程锁使用注意事项:

 1、不要去解锁一个未被加锁的mutex锁;

 2、不要一个线程中加锁而在另一个线程中解锁;

 3、使用mutex锁用于保护临界资源,严格按照“加锁-->写入/读取临界资源-->解锁”的流程执行,对于线程间同步的需求使用条件变量或信号量实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值