???????????????rawos?????????????????????????л?????????????????????????os?????????ucos??rtthread??vxWorks??linux???????????rawos????????????????????????顣?????Щ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

?????л?????????????????????????????棬????????????????????γ???????????????????????????????????????????????????????????????????????????????а???У?????????????????????л?????????

??????е???п???????????????????????????????????????У????????????????????????????е????????????????10????????????????11?????????????????????????????????????????11???????????????????????????????????????????????????11????????????????????????????10??????????????pend??????????????????delay?????????suspend?????????????10?????????????????????????????????????????????????????????????

???????????????????????????????У??????????A??B?????????????10??11????????????????10????????11????????????????????????????????????????????????10???????????????????????????????????????????????????????10?????????С??sleep??????????????????11???????????????????????????10???????????????????????????????????????????類????????????????????????????????e????pend????????????棬???????????????????????????????е???п?????????????????????????????????????Υ????????????漲?????????????????????????е???????????????????????????????????????

????????????????類??????????????????????????????????????????????????????????????????趨????????????????????????????м?д????????????????????????????????????????Щ??л???????thread????????????????н?????????????????????????????????????н???????????????????????п???????????????????????????ж?????????????????????????????pend????????????????????????????????????????????????????????????????????????????????????????????????ɡ????????????????????????????????????????????????????????????????????????????????????????????????Щ??

????????????????????????????????????

typedef struct RAW_MUTEX
  {
   RAW_COMMON_BLOCK_OBJECT       common_block_obj;
   RAW_U8                     count;
  
   /*ponit to occupy task*/
   RAW_TASK_OBJ   *occupy;
   /*occupy task original priority*/
   RAW_U8 occupy_original_priority;
  } RAW_MUTEX;

???????????????????????????????????????????????????????????????????????Щ??????????????????????????????????????涼??????

??????1??????????????????????????????????????飻

??????2?????????ж??????????

??????3??????????????

??????4????????????????????

???????????????????????????????????????????????????????????????????????????????

RAW_U16 raw_mutex_create(RAW_MUTEX *mutex_ptr?? RAW_U8 *name_ptr)
  {
   #if (RAW_MUTEX_FUNCTION_CHECK > 0)
 
   if (mutex_ptr == 0)
    return RAW_NULL_OBJECT;
  
   #endif
 
   /*Init the list*/
   list_init(&mutex_ptr->common_block_obj.block_list);
   mutex_ptr->common_block_obj.block_way = 0;
   mutex_ptr->common_block_obj.name  =  name_ptr;
 
   /*No one occupy mutex yet*/
   mutex_ptr->occupy     = 0;
 
   /*resource is available at init state*/
   mutex_ptr->count   = 1;      
   mutex_ptr->occupy_original_priority =  0;
  
 
   return RAW_SUCCESS;
  }