当前位置:  技术问答>linux和unix

求助:多线程编程死锁,帮忙看看程序!

    来源: 互联网  发布时间:2016-03-26

    本文导语:  程序如下: void TaskStart(void * pParam)  {    OSTaskCreate(Task1,   0, &TaskStk[1][TASK_STK_SIZE-1], Task1_Prio);    OSTaskCreate(Task2,   0, &TaskStk[2][TASK_STK_SIZE-1], Task2_Prio);    sem_1 = OSSemCreat(1);    sem_2 = OSSemCreat(1); } void Ta...

程序如下:
void TaskStart(void * pParam) 
{
   OSTaskCreate(Task1,   0, &TaskStk[1][TASK_STK_SIZE-1], Task1_Prio);
   OSTaskCreate(Task2,   0, &TaskStk[2][TASK_STK_SIZE-1], Task2_Prio);
   sem_1 = OSSemCreat(1);
   sem_2 = OSSemCreat(1);
}

void Task1(void * pParam) 
{
char err;
void * Param;
        Param = pParam;
        while(1)
{
     OSSemPend(sem_1,0,&err);
          my_char++; 
       if ('z' == my_char)
         {
         OSSemPend(sem_2,0,&err);
             MY_CHAR='a';
          OSSemPost(sem_2);
         }
       printf("%c",my_char);
     OSSemPost(sem_1);
        }
}
 

void Task2(void * pParam)
{
char err;
void * Param;
        Param = pParam;
while(1)
{
            OSSemPend(sem_2,0,&err);
          MY_CHAR++; 
      if ('Z' == MY_CHAR)
         {
            OSSemPend(sem_1,0,&err);
               my_char = 'A'; 
            OSSemPost(sem_1);
         }
      printf("%c",MY_CHAR);
    OSSemPost(sem_2);                                                             
}
}
请教:
(1)发生死锁的原因是什么?
(2)怎么解锁?修改程序?
谢谢!!!

|
死锁典型情况:
线程1持有Sem1,要获取Sem2;而线程2持有Sem2要获取Sem1!这样线程1永远无法获取Sem2,线程2也永远无法获取Sem1.死翘翘了。 我看你这个程序就太典型了,简直量身定做!

不知道你这个程序做什么用,看着怪怪!


void Task1(void * pParam) 

char err; 
void * Param; 
        Param = pParam; 
        while(1) 
     { 
       OSSemPend(sem_1,0,&err); 
         my_char++; 
        printf("%c",my_char);
       if ('z' == my_char) 
        {
            OSSemPost(sem_1);
            OSSemPend(sem_2,0,&err); 
            MY_CHAR='a'; 
            OSSemPost(sem_2); 
        }
        else
        {
            OSSemPost(sem_1);
        }
     } 




void Task2(void * pParam) 

char err; 
void * Param; 
        Param = pParam; 
while(1) 

       OSSemPend(sem_2,0,&err); 
          MY_CHAR++; 
       printf("%c",MY_CHAR); 
       if ('Z' == MY_CHAR) 
        {
            OSSemPost(sem_2);
           
            OSSemPend(sem_1,0,&err); 
            my_char = 'A'; 
            OSSemPost(sem_1); 
        }
        else
        {
         OSSemPost(sem_2); 
        }
                                                            





    
 
 

您可能感兴趣的文章:

  • 紧急求助java多线程编程!!!!!!!!!!!!!
  • 求助,线程的回收
  • socket实现多文件并发传输,求助多线程实现问题?
  • 求助Linux下怎样查看线程状态?
  • 线程内部的errno问题求助
  • Opengl Linux多线程 求助
  • 求助多线程问题
  • 求助:Linux下线程编程的问题~~~~~~~~~~~~~~~~~~~`
  • 求助:关于单线程recv时的超时问题
  • 求助!Linux下socket编程,服务端与多线程的问题
  • ■■求助■■ 如何查看一个进程拥有的线程数量???
  • 【求助】在主线程里如何终止子线程的执行?
  • 求助!Linux多线程问题
  • 求助!!!多线程+多个epoll_wait问题
  • 求助!pthread与Win32 API线程库的对应问题
  • 【求助】如何使运行中的线程挂起?
  • 求助linux下socket多线程编程的例子(C语言写的)
  • (100分求助)用内核线程对用户进程操作(大侠/虾们出手了)
  • 求助!关于多线程下数据库操作的问题,请大家帮忙看看
  • MM求助:怎样多线程下载http://java.sun.com上的东东? 用http方式,谢谢了.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助~~各位兄台帮帮忙!!感恩!!
  • 帮忙,求助!!
  • 急需jbuilder!!!!大侠帮忙!(高分求助)
  • 求助,各位大虾帮忙
  • 求助!高手帮忙
  • 求助文件操作中修改文件中字段的问题,请大家帮忙解决
  • 求救!!已经在好几个版求助了,大家帮帮忙啊!
  • 求助,急!高手请帮帮忙!
  • 紧急求助,关于kill进程 , 大家帮帮忙啊 !!!
  • [求救]新手有问题求助,谢谢帮忙!
  • 求助!!多谢帮忙!Linux上CPU的问题。
  • 大伙帮忙啊!高分求助!关于S3的显卡
  • 求助大家帮忙编写linux遍历进程程序
  • 求助:请用java开发过项目的朋友一定帮忙。。。谢谢!
  • 求助一个shell脚本,求高手,求帮忙!!!!!
  • 【求助】system()命令执行失败,请高手帮忙解决,谢谢!
  • 求助:大家帮忙来看看这个shell cript的bug
  • [求助]关于jrun的使用大家帮忙看一下了  
  • java调oracle过程的出了问题,求助!帮忙看看
  • [求助]mail服务器当掉,大家帮帮忙,谢谢谢谢
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3