多核计算与程序设计 - 05 基本算法和数据结构 之二 多线程链表
来源:互联网 发布:淘宝嗅觉系是真的吗 编辑:程序博客网 时间:2024/05/16 12:47
链表是数据结构中的基础知识,这里不做详细说明。这里说的多线程链表主要是对链表的访问加了一些互斥等访问控制,使多线程可以安全的访问链表。
多线程链表中有锁,用来保障线程对队列的访问时的互斥性。
此程序运行在 Red Hat Linux上, 使用 pthread 库。
#include <pthread.h>#ifndef __MT_LIST_H__#define __MT_LIST_H__typedef struct _DLIST_NODE_st{ struct _DLIST_NODE_st *m_pNext; struct _DLIST_NODE_st *m_pPrev; void *m_pData;} DLIST_NODE_st;typedef struct _DList_st{ DLIST_NODE_st* m_pHead; DLIST_NODE_st* m_pTail; DLIST_NODE_st* m_pCurr; unsigned int m_uCount;} DList_st;typedef struct _MTList_st{ DList_st *m_List; <span style="color:#ff0000;">pthread_mutex_t m_Lock;</span>} MTList_st;class MT_DList{public: MT_DList(); int PushHead(void *pData); int PushTail(void *pData); void* PopHead(); void* PopTail(); ~MT_DList();private: MTList_st * m_pList;};#endif
在运行 Push 和 Pop的过程中都会对锁进行操作,从而保证多线程访问队列的安全性。
完整源代码下载
测试结果:
Create MT_DList
PushHead push pre_lock
PushHead push un_lock
Push Msg 0
pop Tail locking
pop Tail unlocking
Pop Msg 0
PushHead push pre_lock
PushHead push un_lock
Push Msg 1
pop Tail locking
pop Tail unlocking
Pop Msg 1
PushHead push pre_lock
PushHead push un_lock
Push Msg 2
pop Tail locking
pop Tail unlocking
Pop Msg 2
PushHead push pre_lock
PushHead push un_lock
Push Msg 3
PushHead push pre_lock
PushHead push un_lock
Push Msg 4
pop Tail locking
pop Tail unlocking
Pop Msg 3
PushHead push pre_lock
PushHead push un_lock
Push Msg 5
pop Tail locking
pop Tail unlocking
Pop Msg 4
PushHead push pre_lock
PushHead push un_lock
Push Msg 6
PushHead push pre_lock
PushHead push un_lock
Push Msg 7
pop Tail locking
pop Tail unlocking
Pop Msg 5
PushHead push pre_lock
PushHead push un_lock
Push Msg 8
pop Tail locking
pop Tail unlocking
Pop Msg 6
PushHead push pre_lock
PushHead push un_lock
Push Msg 9
pop Tail locking
pop Tail unlocking
Pop Msg 7
pop Tail locking
pop Tail unlocking
Pop Msg 8
pop Tail locking
pop Tail unlocking
Pop Msg 9
- 多核计算与程序设计 - 05 基本算法和数据结构 之二 多线程链表
- 多核计算与程序设计 - 04 基本算法和数据结构 之一 多线程栈
- 多核计算与程序设计 - 06 基本算法和数据结构 之三 哈希表与哈希链表
- 多核计算与程序设计 - 07 基本算法和数据结构 之四 树
- 多核计算与程序设计 - 09 基本算法和数据结构 之四 AVL搜索树
- 多核计算与程序设计 - 08 基本算法和数据结构 之四 二叉树
- 多核计算与程序设计 - 02 基础知识 之二 锁
- 多核计算与程序设计
- 多核计算与程序设计
- 多核计算与程序设计 - 01 基础知识 之一 多核编程与单核多线程和分布式编程的区别
- 数据结构(二)数据结构与基本算法
- 多核计算中多线程的退出算法
- 读写锁算法的伪代码实现---摘《多核计算与程序设计》
- 浅谈多核CPU、多线程与并行计算
- 浅谈多核CPU、多线程与并行计算
- 浅谈多核CPU、多线程与并行计算
- 浅谈多核CPU、多线程与并行计算
- 浅谈多核CPU、多线程与并行计算
- android同步数据库数据
- 我心目中的编程高手
- JVM学习之:虚拟机中的运行时栈帧总结(二)
- 公司绝不会告诉你的20大秘密 值得一看很受用
- linux GDB调试技术
- 多核计算与程序设计 - 05 基本算法和数据结构 之二 多线程链表
- 插入排序和合并排序
- 阻塞非阻塞socket
- 物化视图应用
- mail qmail ezmlm
- 2.静态,单例,继承!
- 求助sizeof类,多重继承,混合继承
- c#在类型系统世界的位置
- 第四章---查找