当前位置:首页 >> 数学 >>

成员变量、局部变量、全局变量加锁问题


局部变量有自己的内存空间,相互直接是独立,互补干扰的,所以没必要加锁。 而对于成员变量, 和全局变量在只读不写的情况下也不要加锁。 假如有一个线程对成员变量 和全局变量进行写操作是就必须加锁。加锁是一个好习惯。 /// <summary> /// 取得线程数据包 /// </summary> /// <param name="cabinetNo">柜号</param> /// <param name="sideNo">面号</param> /// <param name="layerNo">层号</param> /// <returns>数据处理包</returns> /// <remarks>注意加锁,枚举元素的过程中,不可以对队列中元素进行增加或者删 除</remarks> internal StorageDataThreadFactory GetStroageDataPackage(int cabinetNo, int sideNo, int layerNo) { if (this.m_StoragehreadList == null || this.m_StoragehreadList.Count <= 0) return null; lock (m_StoragehreadList) { for (int i = 0; i < m_StoragehreadList.Count; i++) { if (m_StoragehreadList[i].CabinetNo == cabinetNo && m_StoragehreadList[i].SideNo == sideNo && m_StoragehreadList[i].LayerNo == layerNo) { return m_StoragehreadList[i]; } } } return null; } m_StoragehreadList 是一个成员变量,每个托盘创建一个线程。 /// <summary> /// 发送数据 /// </summary> /// <param name="clientId">客户端编号</param> /// <param name="size">数据大小</param> /// <param name="buf">数据包</param> /// <returns>错误码 TODO...</returns> private int SendData(int clientId, int size, List<byte[]> sendPacketList) { if (clientId <= 0)

return -2; if (sendPacketList == null || sendPacketList.Count <= 0 || size <= 0) return -3; //if (!m_KAIO.isRun) // return -2; //如果 commPowerList 个数大于 1,说明多个设备连接同一个中位机,即使用 一个 IP CommunicatePower commPower = FindCommunicatePower(clientId); if (commPower == null) return -1; if (commPower.ClientId == 0) return -4; bool result = false; lock (commPower.SyncRoot)//加锁 { foreach (byte[] sendDataUnit in sendPacketList) { if (sendDataUnit != null && sendDataUnit.Count() <= 0) continue; result = ISendBin(commPower.ClientId, sendDataUnit, sendDataUnit.Length) > 0 ? true : false; if (result) { if (OnSendMessageCommand != null) OnSendMessageCommand(this, new AcqReceiveMessageStreamEvent(sendDataUnit, DateTime.Now, commPower.IPAdress, commPower.Port)); } else { if (OnSendMessageCommand != null) OnSendMessageCommand(this, new AcqReceiveMessageStreamEvent(sendDataUnit, new DateTime(1970, 1, 1), commPower.IPAdress, commPower.Port)); } //if (result == false) //{ // Console.WriteLine("{0}",123456789); //} //Trace.WriteLine(CommonFunction.ByteArrayToHexStr(sendDataUnit)); } }

return 0; } 枚举或者在使用公共资源时,如果这个公共资源被某个线程进行写操作,那么就必须加锁。


相关文章:
成员变量、局部变量、全局变量加锁问题.doc
成员变量、局部变量全局变量加锁问题_数学_自然科学_专业资料。局部变量有自己的内存空间,相互直接是独立,互补干扰的,所以没必要加锁。 而对于成员变量, 和全局...
成员变量局部变量全局变量加锁问题.doc
成员变量局部变量全局变量加锁问题_数学_自然科学_专业资料。局部变量有自己的内存空间,相互直接是独立,互补干扰的,所以没必要加锁。 而对于成员变量, 和全局变量在...
重要c语言全局变量和局部变量问题汇总.doc
c 语言全局变量局部变量问题汇总 1、关键字 static 的作用是什么? 定义静态变量 2、static 有什么用途?(请至少说明两种) 网上答案: 1).限制变量的作用域(在...
...全局变量,则 ___ 。 A.在函数内只能访问局部变量,而不_百度题库.doc
若程序中定义了局部变量与全局变量,则 ___ 。 A.在函数内只能访问局部变量,而不能访问全局变量B.局部变量与全局变量的名字不得相同C.若...
c语言全局变量和局部变量问题汇总.txt
c语言全局变量局部变量问题汇总 收藏 1、局部变量能否和全局变量重名? 答:能...有点类似于c++中类的静态成员变量,即无论该类型生成多少个实例对象,所有的对象...
C局部和全局变量问题汇总.doc
c 语言全局变量局部变量问题汇总 收藏 1、局部变量能否和全局变量重名? 答:...有点类似于 c++中类的静 态成员变量, 即无论该类型生成多少个实例对象, 所有...
全局变量与局部变量的区别.pdf
全局变量与局部变量的区别全局变量与局部变量的区别 一、变量的分类 变量可以分为: 全局变量、 静态全局变量、 静态局部变量局部变量。 按存储区域分,全局变量、...
全局变量过多的坏处.doc
在函数内引用这 个变量时,会用到同名的局部变量,而不会用到全局变量。 4....而且如果存在多个模块线程同时修改全局变量的话,也容易造成冲突,需要 加线程锁,...
局部变量和全局变量(十)_图文.ppt
局部变量全局变量(十)_计算机软件及应用_IT/计算机_专业资料。§第5章函数...?若在函数体内要将某个变量说明为全局变量,必 须在该变量前加extern。 全局...
局部变量与全局变量.pdf
根据不同的变量类型,数据的实际 位置也不一样。局部变量将数据存储在前面板的输入控件和显示控件中。全局变量 结构隧道: 当需要将循环中的数据传入或者传出时,...
局部变量和全局变量总汇.doc
c 语言全局变量局部变量问题汇总 收藏 1、局部变量能否和全局变量重名? 答:...有点 类似于 c++中类的静态成员变量,即无论该类型生成多少个实例对象,所有的...
全局变量、局部变量、静态全局变量、静态局部变量在内....pdf
变量| 内存|全局变量局部变量、静态全局变量、静态局部变量在内存里的区别_天文
局部变量,局部静态变量,全局变量,全局静态变量分别.doc
局部变量,局部静态变量,全局变量,全局静态变量分别: 局部变量: 栈区 局部静态
局部变量、全局变量、静态局部变量、静态全局变量的异同.doc
使用起来十分灵活,但最容易出问题; 6. 指针参数传递内存的方法及常见错误 P47-P49 二. 局部变量,全局变量,静态局部变量,静态全局变量的异同 局部变量, 全局变量...
C、C++中的静态全局变量,静态局部变量,全局变量,局部变....pdf
C、C++中的静态全局变量,静态局部变量,全局变量,...入问题,因为他们都放在静态数据存储区,全局可见; D...对该类的多个对 象来说,静态数据成员只分配一次...
以下叙述中正确的是___。 A) 全局变量的作用域一定比局部变量的....doc
A) 全局变量的作用域一定比局部变量的作用域范围大B) 静态(statiC) 类别变量的生存期贯穿于整个程序的运行期间C) 函数的形参都属于全局变量D) 未在定义语句中赋...
第四讲 循环结构 局部变量 全局变量_图文.ppt
Random Number (01)再将结果除以4,就能得到这些数的平均值(当前数加上以 ...成员变量局部变量全局变... 暂无评价 3页 5下载券 c语言全局变量局部变量...
局部变量与全局变量区别,栈、堆和静态存储区的区别.doc
局部变量全局变量区别,栈、堆和静态存储区的区别_计算机软件及应用_IT/计算机_专业资料。C++变量根据定义位置的不同,具有不同的作用域,作用域可分为 6 种:...
labVIEW中局部变量与全局变量.doc
很多教科书上都提示要慎用局部变量全局变量,主要有以下几个原因: 违背了数据流的编程 读取局部变量需要拷贝数据 不能象 SUBVI 一样可以重用数据 BUFFER 不利于...
全局变量和局部变量在内存里的区别.pdf
变量| 内存|全局变量局部变量在内存里的区别_电子/电路_工程科技_专业资料。全局变量局部变量在内存里的区别一、预备知识程序的内存分配 一个由 c/C++编译...
更多相关标签: