6K+ 次浏览
在使用互斥锁的多线程 Pthread 程序中可能会发生死锁。让我们看看它是如何发生的。未锁定的互斥锁由 pthread_mutex_init() 函数初始化。使用 pthread_mutex_lock() 和 pthread_mutex_unlock() 获取和释放互斥锁。如果线程尝试获取已锁定的互斥锁,则对 pthread_mutex_lock() 的调用会阻塞线程,直到互斥锁的所有者调用 pthread_mutex_unlock()。让我们来看一个例子,在下面的代码中创建了两个互斥锁:/* 创建并初始化互斥锁 */ pthread_mutex_t mutex1; pthread_mutex_t mutex2; pthread_mutex_init(&mutex1, NULL); pthread_mutex_init(&mutex2, NULL);接下来,两个线程… 阅读更多
720 次浏览
事务内存起源于数据库理论,提供了一种替代的进程同步策略。内存事务是原子的,是一系列内存读写操作。如果事务中的所有操作都已完成,则提交内存事务。否则,必须中止并回滚这些操作。可以通过添加到编程语言的功能来获得事务内存的便利性。考虑一个示例。假设我们有一个修改共享数据的函数 update()。传统上,此函数将使用互斥锁(或信号量)编写,如下所示:void update (){ acquire(); /* 修改共享数据 */ ... 阅读更多
2K+ 次浏览
Solaris 实现各种锁来支持多任务处理、多线程和多进程。它使用自适应互斥锁、条件变量、信号量、读写锁、旋转门来控制对临界区的访问。自适应互斥锁用于保护每个临界数据项,这些数据项仅由短代码段访问。在多处理器系统上,它从标准信号量自旋锁开始。如果锁由在另一个 CPU 上运行的线程持有,则线程自旋。如果锁由当前处于运行状态的线程持有,则线程阻塞,进入睡眠状态,直到被信号唤醒… 阅读更多
Windows 操作系统是一个多线程内核,支持实时应用程序和多处理器。在单处理器系统上,Windows 提供中断屏蔽来保护对全局资源的访问。它使用自旋锁来保护对全局资源的访问。内核仅使用自旋锁来保护短代码段,例如 Solaris。内核确保在持有自旋锁时,线程永远不会被抢占。Windows 根据几种不同的机制(包括互斥锁、信号量、事件和计时器)提供调度程序对象来进行线程同步。系统通过要求线程为了访问数据而获得互斥锁的所有权来保护共享数据,并且… 阅读更多
要使用信号量实现监视器,对于每个监视器,都提供一个互斥信号量(初始化为 1)。进程在进入监视器之前必须执行 wait(mutex),并在离开监视器后必须执行 signal(mutex)。由于发出信号的进程必须等到恢复的进程离开或等待,因此引入了另一个初始化为 0 的信号量 next。next 可用于发出信号的进程来挂起自身。还提供了一个整型变量 next_count 来计算挂起在 next 上的进程数。因此,每个外部函数 F 都被替换为 - wait(mutex); … F 的主体 ... ... 阅读更多
18K+ 次浏览
数据并行数据并行意味着在每个多个计算核心上并发执行相同的任务。让我们来看一个例子,对大小为 N 的数组的内容求和。对于单核系统,一个线程会简单地对元素 [0] ... [N − 1] 求和。但是,对于双核系统,在核心 0 上运行的线程 A 可以对元素 [0] ... [N/2 − 1] 求和,而同时在核心 1 上运行的线程 B 可以对元素 [N/2] ... [N − 1] 求和。因此,两个线程将在单独的计算核心上并行运行。任务并行任务… 阅读更多
15K+ 次浏览
7K+ 次浏览
阿姆达尔定律假设,莫妮必须参加一个邀请。莫妮的另外两个朋友迪娅和海娜也收到了邀请。条件是所有三个朋友都必须分开前往,并且他们都必须在场才能进入大厅。现在莫妮开车来,迪娅乘公共汽车来,海娜步行来。现在,莫妮和迪娅到达的速度有多快并不重要,他们必须等待海娜。因此,为了加快整个过程,我们需要关注海娜而不是莫妮或迪娅的效率。这是… 阅读更多
多核编程有助于创建并发系统,以便在多核处理器和多处理器系统上部署。多核处理器系统基本上是一个单个处理器,在一个芯片上具有多个执行核心。它在主板或芯片上有多个处理器。现场可编程门阵列 (FPGA) 可能会包含在多处理器系统中。FPGA 是一种集成电路,包含可编程逻辑块数组和可重配置互连的层次结构。输入数据被处理以产生输出。它可以是多核或多处理器系统中的处理器,也可以是 FPGA。多核编程方法具有以下优点… 阅读更多
19K+ 次浏览
在数据通信和网络中,正交频分复用 (OFDM) 是一种数字数据调制方法,其中将单个数据流划分为多个单独的子流,通过多个信道进行传输。OFDM 使用频分复用 (FDM) 原理,其中可用带宽被划分为一组具有单独频带的子流。OFDM 由 Chang 于 1966 年在贝尔实验室推出,并于 1971 年由 Weinstein 和 Ebert 改进。OFDM 的工作原理 OFDM 是一种特殊的 FDM,其约束条件是将主信号划分的子流彼此正交。… 阅读更多