分类: Erlang
2013-02-22 11:33:26
在多线程的编程环境下,经常要碰到共享数据的问题,一定要通过加锁的方式才能达到线程安全么?
其实有些情况下,还是不需要加锁的,可以通过异常的方式来判断能否操作。
如:
连接对象的共享,在多线程的环境下,上层对象不管连接对象的可操作性,只管操作,但是要捕获异常,然后在更新连接对象的状态。
对于某些纯数据对象,有时也可以通过2次的判断来解决并发,但是那不是绝对的安全。
在某些非实时系统下,也不需要加锁,它不需要及时感知变化。
如:
某些关键的变量在执行写操作后,对它的读操作可以不用通过加锁,然后判定,允许有延迟。
这里仅仅是提出一种思路,这种通过定义异常的方式来确定可操作性。
对于像erlang这种语言,还不知道它是如何避免锁的使用的,需要好好学习。