嵌入式学习小组
直播中

李勇

7年用户 1244经验值
私信 关注

如何去处理嵌入式软件产生死锁的情况呢

嵌入式软件产生死锁的必要条件及原因有哪些?
如何去处理嵌入式软件产生死锁的情况呢?

回帖(1)

胡皓

2021-12-24 15:49:27
1、输出2,5      【注意指针指向的类型,操作指针的时候才知道指针移动的字节】

int main(){
    inta[5]={1,2,3,4,5};   
    int *ptr=(int*)(&a+1);//a指向int类型,&a指向数组类型
    printf("%d,%d",*(a+1),*(ptr-1));
}


2、死锁
产生死锁的必要条件:(1)互斥条件(资源一次只允许一个进程访问);(2)不可剥夺条件(进程使用资源未完成之前,不能强行夺走);(3)请求和保持条件(一个进程已经占有一个资源,还想获取另一个资源);(4)循环等待条件。
产生死锁的原因:资源竞争,进程推进顺序错误。
死锁的处理:
预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。
避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
检测死锁:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。
3、main函数的返回值:C标准要求定义 int main();   默认缺省的也是int 。返回值一般用来指示程序运行是否正确。
4、要对绝对地址0x100000赋值,我们可以用 (unsigned int*)0x100000 =1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?
答:
((void (*)())0x100000)();
5、如下代码输出?

unsigned short A = 10; \10自身是有符号数,10u才是无符号数
printf("~A = %un", ~A); \出现无符号数的高位扩展,高位补符号位
char c=128; \字符类型表示范围:-128~127
printf("c=%dn",c); \出现有符号数的位数扩展,高位补符号位


答案:4294967285   和    -128。


6、用两个栈实现一个队列。
7、以下代码输出25 7

#define SQ(a) (a)*(a)
int main(){
        int a = 5;
        int b = SQ(a++);
        printf("%d %d",b,a);
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分