众所周知,多线程编程很容易遇上诸如丢失更新、脏读、死锁等烦人的线程冲突问题。多线程的问题一旦发生便很难定位和解决,所以要在编程的初始阶段就要注意避免多线程程序常见的错误。下面总结一些个人在c++多线程编程中遇上的问题。
1、类中的数据成员要尽可能设置读写专用函数,并且在函数中用互斥锁进行并发保护。
解决线程冲突的最基本方法,不用多解释。
2、类中的成员函数要尽量避免在没有保护的情况下对某个成...
分类:
编程语言 时间:
2014-08-21 21:17:25
阅读次数:
602
Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 以下是本文的目录大纲.....
分类:
编程语言 时间:
2014-08-20 09:13:16
阅读次数:
261
Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 以下是本文的目录大纲.....
分类:
编程语言 时间:
2014-08-19 22:15:05
阅读次数:
340
在多线程编程中,少不了异步编程,在目前开发中用到的比较多得时GCD,刚好今天学习了NSOperation,所以就记录一下学习的笔记。 NSOperation表示了一个独立的计算单元。它给了它的子类一个十分有用而且线程安全的方式来建立状态、优先级、依赖性和取消等的模型。或者,你不是很喜欢再自己继...
分类:
其他好文 时间:
2014-08-19 18:42:25
阅读次数:
233
多线程编程基础知识当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。...
分类:
编程语言 时间:
2014-08-19 16:03:04
阅读次数:
417
NSObject类的performSelectorOnMainThread和performSelectorInBackground可以实现简单的多线程编程技术
1、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
创建一个线程在子线程执行,aSelector代表了新创建的线程,arg是传入的参数
2、-...
分类:
编程语言 时间:
2014-08-19 12:58:24
阅读次数:
291
volatile的介绍volatile类似于大家所熟知的const也是一个类型修饰符。volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化。volatile的作用就是用来进行多线程编程。在单线程中那就是只能起到限制编译器优化的作用。所以单线程的童鞋们就不用浪费精力看下面的了。没有vo...
分类:
编程语言 时间:
2014-08-15 17:25:59
阅读次数:
357
自旋锁和相互排斥锁是多线程编程中的两个重要概念。他们都能用来锁定一些共享资源,以阻止影响数据一致性的并发訪问。可是他们之间确实存在差别,那么这些差别是什么?1理论理论上,当一个线程试图获取一个被锁定的相互排斥锁时,该操作会失败然后该线程会进入睡眠,这样就能立即让还有一个线程执行。当持有相互排斥锁的线...
分类:
其他好文 时间:
2014-08-15 12:27:08
阅读次数:
190
互斥锁通信机制
基本原理
互斥锁以排他方式防止共享数据被并发访问,互斥锁是一个二元变量,状态为开(0)和关(1),将某个共享资源与某个互斥锁逻辑上绑定之后,对该资源的访问操作如下:
(1)在访问该资源之前需要首先申请互斥锁,如果锁处于开状态,则申请得到锁并立即上锁(关),防止其他进程访问资源,如果锁处于关,则默认阻塞等待.
(2)只有锁定该互斥锁的进程才能释放该互斥锁.
互斥量类型声...
分类:
编程语言 时间:
2014-08-15 10:47:48
阅读次数:
304