上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页

2017年12月13日

C/C++中的回调函数

摘要: 在理解“回调函数”之前,首先讨论下函数指针的概念。 函数指针 (1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把 阅读全文

posted @ 2017-12-13 10:16 怀想天空2013 阅读(394) 评论(0) 推荐(0) 编辑

2017年12月8日

多线程编程之Windows环境下创建新线程

摘要: 在 Win32 API 中,创建线程的基本函数是 CreateThread,而 _beginthread(ex) 是C++ 运行库的函数。为什么要有两个呢?因为C++ 运行库里面有一些函数使用了全局量,如果使用 CreateThread 的情况下使用这些C++ 运行库的函数,就会出现不安全的问题。而 阅读全文

posted @ 2017-12-08 19:21 怀想天空2013 阅读(1136) 评论(0) 推荐(0) 编辑

多线程编程之原子操作

摘要: 在多线程环境中,对共享的变量的访问,可以使用基于Compare And Swap这种lock free的技术进行实现,这种实现的好处是效率高。 一、原子操作摘录 1.1 Android 源码:system/core/libcutils /atomic.c(针对X86): 1 #elif define 阅读全文

posted @ 2017-12-08 19:21 怀想天空2013 阅读(905) 评论(0) 推荐(0) 编辑

多线程环境下队列操作之锁的教训

摘要: 之前一直在研究多线程环境下的编程方法,却很少实战体验,以至于我一提到多线程编程,我总是信心不足,又总是说不出到底哪里不明白。今天工程现场反馈了一个“老问题”,我一直担心的是DAServer的运行机制有什么我不明白的地方,DAS Toolkit中总有一部分是我没有仔细研究的,在我心中有阴影,所以工程出 阅读全文

posted @ 2017-12-08 19:20 怀想天空2013 阅读(639) 评论(0) 推荐(0) 编辑

多线程编程之优先级翻转问题

摘要: 一、什么是优先级翻转问题 所谓优先级翻转问题(Priority Inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到 阅读全文

posted @ 2017-12-08 19:19 怀想天空2013 阅读(1887) 评论(0) 推荐(0) 编辑

多线程编程之顺序锁

摘要: 一、什么是顺序锁 顺序锁对读写锁的一种优化,使用顺序锁时,读不会被写执行单元阻塞(在读写锁中,写操作必须要等所有读操作完成才能进行)。也就是说,当向一个临界资源中写入的同时,也可以从此临界资源中读取,即实现同时读写,但是不允许同时写数据。如果读执行单元在读操作期间,写执行单元已经发生了写操作,那么, 阅读全文

posted @ 2017-12-08 19:18 怀想天空2013 阅读(671) 评论(0) 推荐(0) 编辑

多线程编程之线程死锁问题

摘要: 在多线程编程中,除了要解决数据访问的同步与互斥之外,还需要解决的重要问题就是多线程的死锁问题。所谓死锁: 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外部处理作用,它们都将无限等待下去。 一、死锁原因与形成条件 死锁形成的原因: 死锁形成的条件: 从编程经 阅读全文

posted @ 2017-12-08 19:17 怀想天空2013 阅读(392) 评论(0) 推荐(0) 编辑

多线程编程之无锁队列

摘要: 关于无锁队列的概念与实现,可以参考博文《无锁队列的实现》,主要涉及到的知识点包括CAS原子操作、无锁队列的链表实现、无锁队列的数组实现以及ABA问题。 下面借鉴了《多线程的那点儿事(之无锁队列)》的代码,说明两个线程(一个添加一个读取数据)之间的无锁队列,可以不借助线程互斥方法就能够达到并行效果。代 阅读全文

posted @ 2017-12-08 19:17 怀想天空2013 阅读(2114) 评论(0) 推荐(0) 编辑

多线程编程之生产者消费者问题

摘要: 生产者-消费者问题(Producer-consumer problem),也称作有限缓冲问题(Bounded-buffer problem),是多线程领域的一个经典问题,可以描述为:两个或者更多个线程共享同一个缓冲区,其中一个或多个作为“生产者”会不断地向缓冲区中添加数据,另外的一个或者多个作为“消 阅读全文

posted @ 2017-12-08 19:16 怀想天空2013 阅读(802) 评论(0) 推荐(0) 编辑

多线程编程之读写锁

摘要: 在《多线程编程之Linux环境下的多线程(二)》一文中提到了Linux环境下的多线程同步机制之一的读写锁。本文再详细写一下读写锁的概念和原理。 一、什么是读写锁 读写锁(也叫共享-独占锁)实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源 阅读全文

posted @ 2017-12-08 19:15 怀想天空2013 阅读(336) 评论(0) 推荐(0) 编辑

多线程编程之嵌套锁

摘要: 嵌套锁只是针对一种特殊情况而引申出来的锁应用形式而已。 参考下面这种应用场合: 可以发现,sub_func()和data_process()都使用了相同的一把锁hLock。很明显,如果hLock不是信号量,那么sub_func()被data_process()调用之后将永远无法获取这把锁。怎么办呢? 阅读全文

posted @ 2017-12-08 19:15 怀想天空2013 阅读(1172) 评论(0) 推荐(0) 编辑

多线程编程之原子锁

摘要: 在《多线程编程之数据访问互斥》一文中简单介绍了原子锁,这里再详细说一下原子锁的概念和用途。 (1)简单数据操作 如果在一个多线程环境下对某个变量进行简单数学运算或者逻辑运算,那么就应该使用原子锁操作。因为,使用临界区、互斥量等线程互斥方式将涉及到很多操作系统调用和函数调用等,效率肯定不如原子操作高。 阅读全文

posted @ 2017-12-08 19:14 怀想天空2013 阅读(2648) 评论(0) 推荐(0) 编辑

多线程编程之自旋锁

摘要: 一、什么是自旋锁 一直以为自旋锁也是用于多线程互斥的一种锁,原来不是! 自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单 阅读全文

posted @ 2017-12-08 19:14 怀想天空2013 阅读(1059) 评论(0) 推荐(0) 编辑

多线程编程之Linux环境下的多线程(三)

摘要: 前面两篇文章都讲述了Linux环境下的多线程编程基础知识,也附带了典型实例。本文主要比较一下Linux环境与Windows环境下的多线程编程区别。 看待技术问题要瞄准其本质,不管是WIN32、Linux还是VxWorks,其涉及到多线程的部分都是那些内容,无非就是线程控制和线程通信,它们的许多函数只 阅读全文

posted @ 2017-12-08 19:13 怀想天空2013 阅读(920) 评论(0) 推荐(0) 编辑

多线程编程之Linux环境下的多线程(一)

摘要: 一、Linux环境下的线程 相对于其他操作系统,Linux系统内核只提供了轻量级进程的支持,并未实现线程模型。Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。 进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享 阅读全文

posted @ 2017-12-08 19:12 怀想天空2013 阅读(10299) 评论(0) 推荐(0) 编辑

多线程编程之Linux环境下的多线程(二)

摘要: 上一篇文章中主要讲解了Linux环境下多线程的基本概念和特性,本文将说明Linux环境下多线程的同步方式。 在《UNIX环境高级编程》第二版的“第11章 线程”中,提到了类UNIX系统中的三种基本的同步机制:互斥、读写锁、条件变量。下面分别针对这三种机制进行说明: 一、线程互斥 互斥意味着具有“排它 阅读全文

posted @ 2017-12-08 19:12 怀想天空2013 阅读(791) 评论(0) 推荐(0) 编辑

多线程编程之Windows同步方式

摘要: 在Windows环境下针对多线程同步与互斥操作的支持,主要包括四种方式:临界区(CriticalSection)、互斥对象(Mutex)、信号量(Semaphore)、事件对象(Event)。下面分别针对这四种方式作说明: (1)临界区(CriticalSection) 每个进程中访问临界资源的那段 阅读全文

posted @ 2017-12-08 19:11 怀想天空2013 阅读(573) 评论(0) 推荐(0) 编辑

多线程编程之数据访问互斥

摘要: 在多线程存在的环境中,除了堆栈中的临时数据之外,所有的数据都是共享的。如果我们需要线程之间正确地运行,那么务必需要保证公共数据的执行和计算是正确的。简单一点说,就是保证数据在执行的时候必须是互斥的。否则,如果两个或者多个线程在同一时刻对数据进行了操作,那么后果是不可想象的。 保证多线程之间的数据访问 阅读全文

posted @ 2017-12-08 19:10 怀想天空2013 阅读(498) 评论(0) 推荐(0) 编辑

多线程编程之基础概念

摘要: 一、什么是线程 线程(thread)是进程中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基 阅读全文

posted @ 2017-12-08 19:09 怀想天空2013 阅读(246) 评论(0) 推荐(0) 编辑

2017年11月28日

怎么设置vpn连接

摘要: 方法/步骤 首先在工具栏找到“宽带连接”右键点击“宽带连接”,选择“打开网络和共享中心” 进入“网络和共享中心”之后,点击“设置新的连接或网络” 点击“连接到新的工作区”,点击“下一步” 选择“使用我的internet连接(VPN)I” 输入购买vpn的网站所给你提供的“internet地址”,点击 阅读全文

posted @ 2017-11-28 11:19 怀想天空2013 阅读(8) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页

导航