收藏 分享(赏)

多线程的那点儿事(之无锁链表).doc

上传人:gnk289057 文档编号:4563916 上传时间:2019-01-02 格式:DOC 页数:3 大小:55.50KB
下载 相关 举报
多线程的那点儿事(之无锁链表).doc_第1页
第1页 / 共3页
多线程的那点儿事(之无锁链表).doc_第2页
第2页 / 共3页
多线程的那点儿事(之无锁链表).doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、 软件英才网 软件行业驰名招聘网站有需要请联系我们多线程的那点儿事(之多线程数据结构) 要想编写多线程,那就要使用锁。而在软件编写中,数据结构是少不了的。所以,我们在编写多线程的时候,就需要考虑一下如何在数据结构中插入锁。当然,有些数据结构是没有锁的,所以自然这个锁并不一定是必须的。比如说,我们编写一个多线程堆栈,应该怎么做呢,cpp view plaincopy typedef struct _STACK void* pData; int maxLen; int top; void* hLock; STATUS (*push)(struct _STACK* pStack, void* pDa

2、ta, int size); STATUS (*pop)(struct _STACK* pStack, void* pData, int size); STACK; (1) 初始化操作cpp view plaincopy STACK* get_new_stack(void* pData, int len, void* pLock) STACK* pStack; if(NULL = pData | 0 = len) return NULL; pStack = (STACK*)malloc(sizeof(STACK); assert(NULL != pStack); memset(pStack,

3、0, sizeof(STACK); pStack-pData = pData; pStack-maxLen = len; if(NULL != pLock) pStack-hLock = pLock; return pStack; (2) 添加数据软件英才网 软件行业驰名招聘网站有需要请联系我们cpp view plaincopy STATUS push(struct _STACK* pStack, void* pData, int size) assert(NULL != pStack if(NULL != pStack-hLock) WaitForSingleObject(HANDLE)p

4、Stack-hLock, INFINITE); if(pStack-top = pStack-maxLen) if(NULL != pStack-hLock) ReleaseMutex(HANDLE)pStack-hLock); return ERROR; memmove(char*)pStack-pData + size * pStack-top, (char*)pData, size); pStack-top +; if(NULL != pStack-hLock) ReleaseMutex(HANDLE)pStack-hLock); return OK; (3) 对2进行优化,因为判断的条

5、件比较复杂cpp view plaincopy #define STACK_CHECK_LOCK(hLock) do if(hLock) WaitForSingleObject(HANDLE)hLock, INFINITE); while(0) #define STACK_CHECK_UNLOCK(hLock) do if(hLock) ReleaseMutex(HANDLE)hLock); while(0) 所以,2 的代码可以修改为,cpp view plaincopy STATUS push(struct _STACK* pStack, void* pData, int size) 软件

6、英才网 软件行业驰名招聘网站有需要请联系我们 assert(NULL != pStack STACK_CHECK_LOCK(pStack-hLock); if(pStack-top = pStack-maxLen) STACK_CHECK_UNLOCK(pStack-hLock); return ERROR; memmove(char*)pStack-pData + size * pStack-top, (char*)pData, size); pStack-top +; STACK_CHECK_UNLOCK(pStack-hLock); return OK; 总结:(1) 一般来说,比较好的数据结构要兼有多线程和没有多线程两种情况(2) 如果需要用其他的锁代替 mutex,直接换掉就可以,十分方便

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报