mq_receive 报错?
1,检查有没有创建消息队列(/dev/mqueue/xxx);
2,检查旧的队列有没有被删除;
始终处与__lll_wait_lock状态?
1,查看使用的lock有没有被创建;
2,查看使用的lock有没有被初始化;
3,查看有没有死锁 (打印锁变量,查看owner;查看rdi也可以查看owner)
如何让git更加方便的提交和回退?
1,理解git本地管理模型:work -(add)- index/stage -(commit)- repository;
2,基于上述模型,先add,确认后再commit;回退时先reset从index中拉,不行在checkout从repository中拉。
makefile中用vpath指定路径,还是提示找不到文件?
1,注意makefile的逻辑:target - prerequest - command。vpath指定了前二者的搜索路径。
2,command的搜索路径需要再gcc中特别指定,不能和makefile混用。
make过程中,xxx.h文件已经修改,但是似乎并未生效?
1,查看makefile文件是否包含了这个xxx.h文件。
2,查看xxx.h有没有被指定进入command中。
多线程编程注意什么?
一个显而易见的问题 – 线程回收。举例:a - b;b - c;b - d,a创建b,b创建c和d。
1,如果a是进程,且没有join b,那么a结束后,其创建的线程自动死亡。大乌龙。
2,b join c和d。此时如果a,b中有共同变量,则需要注意数据的同步,否则可能出错。
变量的传入和传出?实际参数 -- 形式参数(入参, 出参)
1,临时变量v。
v作为入参,有个小坑:不能跨线程传递。
v作为返回值,有坑:如果是return返回,没问题,返回值会被拷贝出去。如果是出参返回,有问题,因为实参被拷贝进形参,再作为局部变量使用。修改局部的形参,实参没有改变。
2,指针变量p
p做入参,有坑:如果跨线程传递,变量一定要是malloc出来的。如果本线程传递,可以用临时变量的指针。
p做返回值,有坑:如果是return返回,不能返回临时变量的指针,必须是malloc的。如果是出参返回,注意将内存拷贝到p指向的地方,而不是改变p的指向,因为p本身也是临时变量,改变p不影响实参的p值。注意跨函数的free。