分布式系统的基础是多进程之间的并发与协作,这就不可避免的涉及到多个进程对共享资源的互斥访问。
在单系统中,进程间对共享资源的互斥访问可以通过信号量、互斥锁来很容易的实现互斥;
在分布式系统中可能会稍微复杂一点,有些互斥算法的大体思想和单系统中的互斥锁比较类似(比如令牌);但是分布式系统中还有其他更多的互斥方法;
分布式互斥算法可以分为两种不同类型:
1)基于令牌的解决方法,互斥是通过进程之...
分类:
编程语言 时间:
2015-05-10 15:45:50
阅读次数:
194
集中式算法存在单点失效问题,那么我们接着来看一下非集中式算法。
假设共享资源副本被复制了n次,每个副本有其自身协作者控制访问;如果某个进程要访问共享资源,主要获得m>n/2个协作者投票允许即可。
如图1所示,如果进程0要发起访问请求,只要8个协作者中有5个(包括其自身)投票允许即可。
图1
但是该算法也有自身的缺陷,即当某个协作者崩溃时,它将忘记之前投过的票,可能在回复后又投了重复的票...
分类:
编程语言 时间:
2015-05-10 15:44:15
阅读次数:
165
文件锁经常应用于两个方面:1.一是锁定文件中的临界数据,比如并发投票时文件记录的投票数2.二是利用具有互斥性质的写锁,实现进程的并发控制。/*使用文件锁*/#include fcntl(int fildes,int cmd,struct flock* arg);cmd:F_GETLK,F_SETLK...
分类:
其他好文 时间:
2015-05-09 16:13:29
阅读次数:
125
一、概述
在实际的软件程序中,由于代码量较大,函数之间的调用关系较为复杂,因此对于某些全局变量的操作要格外小心。在程序中,一般采用互斥量加锁的方式来保证对全局变量的操作的唯一性。
本文详细介绍了Linux下互斥量加锁与解锁操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考。二、加锁与解锁函数及时间结构体介绍
1.加锁函数pthread_mutex_timedlock
函数原型:in...
分类:
系统相关 时间:
2015-05-09 11:46:48
阅读次数:
174
此文为个人学习《C#并行编程高级教程》的笔记,总结并调试了一些文章中的代码示例。 在以后开发过程中可以加以运用。
对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行访问。经常要做的就是对一些队列进行加锁-解锁,然后执行类似插入,删除等等互斥操作。 .NetFramework 4.0 中提供了一些封装好的支持并行操作数据容器,可以减少并行编程的复杂程度。
基本信息...
1.线程概念
线程就是“轻量级”的进程
线程与创建它的进程共享代码段和数据段
线程拥有自己独立的栈
2.函数学习
创建线程
函数名:pthread_create
函数原型:int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg)
...
分类:
编程语言 时间:
2015-05-07 18:50:51
阅读次数:
128
垒骰子
赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。
经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!
我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。
假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。
两...
分类:
其他好文 时间:
2015-05-07 16:51:59
阅读次数:
169
实验报告一、实验目的1.熟悉临界资源、信号量及PV操作的定义与物理意义2.了解进程通信的方法3.掌握进程互斥与同步的相关知识4.掌握用信号量机制解决进程之间的同步与互斥问题5.实现生产者-消费者问题,深刻理解进程同步问题二、实验环境Linux系统三、实验内容在Linux操作系统下用C或C++实现经典...
分类:
其他好文 时间:
2015-05-07 11:54:50
阅读次数:
253
linux应用开发-信号量互斥编程
一 相应的函数
1 创建/打开信号量集合
函数名 semget
函数原形 int semget(key_t key, int nsems, int semflg)
函数功能
获取信号量集合的标识符
当key所指的信号量不存在的时候,且semflg里包含了IPC_CREAT,就会创建一个信号量的集合
所属头文...
分类:
系统相关 时间:
2015-05-07 08:52:59
阅读次数:
188
原作者:chexlong原文地址:http://blog.csdn.net/chexlong/article/details/7060425在Win32平台上进行多线程编程,常会用到锁。下边用C++实现了互斥对象(Mutex)锁和临界区(CRITICAL_SECTION)锁,以加深理解和今后方便使用...
分类:
其他好文 时间:
2015-05-06 20:59:03
阅读次数:
154