在自己写代码获得东西


自己在鼓弄自己的小项目,要用到多线程技术自然就要用到考虑资源的访问。以前觉没有什么,现在自己写这么一个小项目稍微改一下代码就出现死锁。

代码没有多少行,但要找半天才能发现代码逻辑错误。

所以使用互斥或者临界区域等等来解决资源竞争的问题时候要非常注意代码书写,这个就好像宏定义一样,稍微不注意就发生错误,而且这些错误不是很好的定位。所以有经验人写宏都有特殊格式防止引起错误。

 

在我的代码中学习总结出2点:

1: 控制竞争代码尽量只包含要访问的资源

因为控制过多的代码实在不好控制,比喻你控制代码有一个break(假设在while或者for的里面)或者return  那么就很可能出现死锁,你稍微不注意还不知道哪里出现代码错误。

 

2:访问资源时候,最好把资源内容用局部变量保存起来。

比喻下面代码

 开始错误代码

	for(int i = 0; i < g_ThreadNum; i++)
	{
		EnterCriticalSection(&cs_FilePacket);
		
		if(Port[i].State == false)
		{
			nPort = Port[i].port;
			Port[i].State = true;
			break;
		}
		LeaveCriticalSection(&cs_FilePacket);
	}

这里发送错误有点与第一条类似,不要控制过多代码。

下面是按照第二条写的话,这样子就不会发送错误。

 for(int i = 0; i < g_ThreadNum; i++)
 {
  EnterCriticalSection(&cs_FilePacket);
  GlobalPort p = Port[i];
  LeaveCriticalSection(&cs_FilePacket);
  if(p.State == false)
  {
   nPort = p.port;
   p.State = true;

   EnterCriticalSection(&cs_FilePacket);
   Port[i] = p;
   LeaveCriticalSection(&cs_FilePacket);
   break;
  }
  
 }

 上面就是我写代码一些收获。

今天逛博客学到很一样很重要东西:学会做事,先学会做人。从心里明白了这句话了。

code code up

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值