首页 文章
  • 1 votes
     answers
     views

    在C中实现二进制信号量类

    所以,我正在我的一个 class 中安排一个调度程序 . 基本上,我们假装一次只能执行一个线程 . 我们应该使用信号量类来允许这些线程阻塞自己来模拟等待CPU的线程 . 问题是,线程似乎在错误的时间阻塞并在错误的时间执行 . 我想知道我是否缺少对信号量的概念性理解以及如何实现它 . 我想知道我是否能对我的实施得到一些反馈 . 教师提供了这个头文件,我没有以任何方式修改过: class Semaph...
  • 2 votes
     answers
     views

    C使用信号量而不是忙等待

    我试图了解信号量和多线程 . 我正在使用的示例创建1到t个线程,每个线程指向下一个,最后一个线程指向第一个线程 . 该程序允许每个线程顺序转动,直到所有线程转了n圈 . 那是程序结束的时候 . 唯一的问题是在tFunc函数中,我正忙着等到它是一个特定的线程 . 我想知道如何使用信号量,以便让所有线程进入睡眠状态并仅在轮到执行以提高效率时唤醒线程 . int turn = 1; int counte...
  • 1 votes
     answers
     views

    使用posix C同时轮询信号量多次

    这个问题要求使用两个信号量,一个作为互斥量,一个作为计数信号量,并且该对用于模拟学生和教师助手之间的交互 .我已经能够轻松地利用二进制信号量了,但是我似乎找不到很多显示计数信号量使用的例子,所以我很确定我错了,这导致我的代码无法正常执行 .我的代码如下 #include <stdio.h> #include <pthread.h> #include <unistd.h...
  • 0 votes
     answers
     views

    我不能正常工作

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> #include <pthread.h> #include <s...
  • 2 votes
     answers
     views

    信号量比我知道它们如何工作之前没有意义

    好吧,所以我自己开始学习信号量,因为我们的课程根本没有教过我们(这是一个非英语老师的助手,很好地利用了我的11,500美元) . 无论如何,我想出了如何使用信号量,并开始我的睡眠理发问题的工作 . 理发师在他的枕头上等待某人 sem_post . 客户等待理发师发布"seatbelt"表示客户可以离开 . 无论如何,我在意识到信号量赢得了线程之后回到了作业 . 提供赋值的是函...
  • -1 votes
     answers
     views

    Windows命名信号量未被锁定

    我正在开发C类,调用Windows API C库 . 我使用Semaphores执行任务,假设我有两个进程: ProcessA有两个信号量: Global \ processA_receiving_semaphore Global \ processA_waiting_semaphore ProcessB有两个信号量: Global \ processB_receiving_semaphor...
  • -1 votes
     answers
     views

    忙着等待使用信号量

    我正在使用信号量做一些同步线程 . 现在我要做的是等待一些客户线程使用floor_clerk线程中的信号量到达队列 . 我之前使用while循环做它 . 客户线程也必须等待,直到map_clerk也使用信号量帮助它 . 我之前使用深度睡眠做这件事 . Any wait must be implemented using P(semaphores) (acquire) 这是等待的方式 . 这是任...
  • 3 votes
     answers
     views

    “阻塞”主线程(dispatch_get_main_queue())和(或不)定期运行currentRunLoop - 有什么区别?

    我有以下代码: - (void)test_with_running_runLoop { dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSTimeInterval checkEveryInterval = 0.05; NSLog(@"Is main queue? : %d&quot...
  • 1 votes
     answers
     views

    生产环境 者消费者同步的伪代码

    我在使用C编程的操作系统类中编写Pseduocode用于家庭作业时遇到了一些麻烦 . 您将实现一个 生产环境 者 - 消费者程序,其中包含N个元素,P 生产环境 者线程和C消费者线程的有界缓冲队列(N,P和C应该是程序的命令行参数,以及三个附加参数,X,Ptime和Ctime,如下所述) . 每个Producer线程都应该将不同的数字排队到队列中(在每次调用Enqueue之间旋转等待Ptime ...
  • -3 votes
     answers
     views

    在JavaFX中同步线程[暂停]

    我创建了一个简单的邮箱,服务器等待客户端向其发送输入 . 问题是只有一个进程进入此循环,并且当它完成它必须执行的操作时崩溃 . 另一个客户端仅在另一个客户端停止工作时才解锁,而不是像前一个客户端一样崩溃 . 这部分代码声明为 public synchronized void run() 的方法,所以我不明白它是否是信号量的问题 . 我试图在wait()方法之前放一个打印,似乎它永远不会进入那里 ....
  • 0 votes
     answers
     views

    如何使用信号量同步执行函数X和Y的3个进程?

    有3个进程同时执行 X() 和 Y() 重复执行 . 要求: 只有最多2个进程可以执行 Y() ,也就是说,当它看到另外两个进程正在执行 Y() 函数时,最后一个进程应跳过 Y() 函数 . 当前不允许执行 Y() 的进程仍应执行 X() 函数 . X() 可以同时由所有3个进程执行 这是我的伪代码,使用信号量的传统P和V操作定义,其中ProcA ProcB和ProcC是 conc...
  • 0 votes
     answers
     views

    如何在同一方法上同步不同类的线程

    我怀疑是如何同步使用相同方法的不同类的线程 . 我有两个不同的类, ClientA 和 ClientB (显然扩展了Thread)和一个Server类的方法 . ClassA 和 ClassB 的线程都必须使用此方法,但是有关于访问的不同策略: 如果 ClassA 的线程正在使用方法内的资源,则同一类的其他线程可以使用它; 如果 ClassB 的线程正在使用该方法,则nobody( C...
  • 0 votes
     answers
     views

    原子性与条件 - 同步机制

    两种管理并发的同步机制:1)原子性:确保没有其他线程更改数据,而一个线程正在运行2)条件同步:确保不同线程中的代码以正确的顺序运行 . 根据我的理解,使用lock, acquire() 和 release() 锁定机制确保同步,在原子方法中,这是第一个同步机制(上图) . 使用条件同步方法实现锁 cannot 信号量只能使用原子同步方法实现吗? 要么 信号量只能使用条件同步方法实现吗? 要么...
  • 1 votes
     answers
     views

    C pthreads / semaphores表现不佳

    我是C新线程的新手,我确信它会在我的问题中显示出来 . 我正在为学校做一个项目,我需要 Build 一个4路交通路口的模型,那里的汽车是线程 . 我有一个时钟计数器,每个时钟刻度我生成一个随机数量的汽车,为每个汽车创建一个简单的汽车对象,将新车放入4个队列(街道)中的一个,然后制作一个pthread来处理汽车 . 每辆车必须等到它到达街道的前面,然后等待一个信号,表明汽车可以行驶 . 因此,如果有...
  • -2 votes
     answers
     views

    如何找出正在运行的线程以及如何在C中使用信号量

    我正在做一个程序,其中用户输入了票数和卖家数 . 我有一个线程数组,线程数等于卖家数 . 我必须通过对所有线程使用卖出功能来“卖”票 . 我必须使用计数信号量来查看我剩下的票数和每个线程销售的票数 . 输出看起来像卖家#1卖了一个(49左)卖家#0卖了一个(48左)卖家#1卖了一个(47左)卖家#1卖了一个(46左)卖家#1卖了一个(45)左)卖家#1卖了一个(44左)卖家#1卖了一个(左边43个...
  • 1 votes
     answers
     views

    ARM Cortex-M4 Mutex锁 . DMB指令

    我阅读了以下文档:ARM的Barrier_Litmus_Tests_and_Cookbook . 第7.2节显示了获取互斥锁/信号量的代码 . Loop LDREX R5, [R1] ; read lock CMP R5, #0 ; check if 0 STREXEQ R5, R0, [R1] ; attempt to store new value CMPEQ R5, ...
  • 2 votes
     answers
     views

    为什么这个代码在valgrind(helgrind)下失败了?

    **已解决:在我 class 的构造函数中,我有一个Semaphore的构造赛车,其中有一个Thread的构造,我希望首先创建Semaphore,然后创建Thread . 对我有用的解决方案是首先在基类中创建信号量,这样我就可以在派生类中依赖它 . ** 我有一个相当小的pthreads C程序,在正常情况下工作正常 . 但是,当在程序上使用valgrind的线程错误检查工具时,它似乎可以发现竞...
  • 1 votes
     answers
     views

    信号量实现的 生产环境 者 - 面向消费者的线程池

    我目前正在进行一项教育任务,我必须实现一个只有信号量的线程安全线程池 . 我在作业期间不得使用: Synchronize wait notify sleep 或任何线程安全的API . 首先,我没有太多的代码我: 实现了一个线程安全队列(没有两个线程可以同时排队\出队)(我用_916744测试了这个问题并且问题仍然存在) 设计本身: 共享: Tasks 信号量= 0 Ava...
  • 20 votes
     answers
     views

    用户和内核空间之间的共享信号量

    短版 是否可以在用户空间和内核空间之间共享信号量(或任何其他同步锁)? Named POSIX semaphores have kernel persistence,这就是为什么我想知道是否可以从内核上下文创建和/或访问它们 . 由于有关正常使用POSIX信号量的大量信息,搜索互联网并没有多大帮助 . 长版 我正在开发一个unified interface to real-time systems...
  • 2 votes
     answers
     views

    ARM Cortex M4 - 当PRIMASK设置为1时,SysTick中断请求会发生什么?

    我正在学习RTOS,我正在谈论信号量 . 这本书实现了自旋锁信号量,但是我无法理解SysTick会发生什么,它用于实现上下文切换 . void OS_Wait(int32_t *s){ while( (*s) == 0 ) { EnableInterrupts(); //Does SysTick "wait" until this line? ...
  • 1 votes
     answers
     views

    信号量:具有优先级的关键部分

    我正在用Java编写一个程序来处理Semaphores的任务 . 我对Semaphores和并发的想法还很陌生 . 问题描述如下: 布尔的向量V [] . 如果Pi需要使用临界区,则V [i]为"True" . 二进制信号量B []的向量,用于阻止进入其临界区的进程:B [i]将是信号量阻塞进程Pi . 只要需要唤醒阻塞进程以使用临界区,就会使用特殊的调度程序进程S...
  • 1 votes
     answers
     views

    初始化信号量以避免死锁情况[关闭]

    有两个并发进程P1,P2使用R1,R2共享资源: P1: Compute; Use R1; Use R2; P2: Compute; Use R1; Use R2; 具有以下调度约束:P2必须在P1访问R1之前完成R1的使用 . P1必须在P2访问R2之前完成R2的使用 . 所需的二进制信号量的最小数量是多少? 如果答案是2,那么执行的顺序是什么?如何初始化信号量以使进程不进...
  • 5 votes
     answers
     views

    展示如何仅使用二进制信号量和普通机器指令来实现计数信号量?

    我正在学习期中考试,这是一个练习题:展示如何只使用二进制信号量和普通机器指令来实现计数信号量(即可以保持任意值的信号量)? 我甚至不确定从哪里开始 . 我在网上发现了这个; P(s) { Pb(mutex_s); s = s-1; if(s < 0) {Vb(mutex_s); Pb(delay_s);} Vb(mutex_s); } V(s) { Pb(mutex_s); s = s+1;...
  • 0 votes
     answers
     views

    如何使用信号量

    我们有两个并发运行的进程A和B:ProcessA:声明A1;声明A2; 过程B.声明B1;声明B2; 通过使用信号量,我如何声明A1在B2之前执行,B1在A2之前执行 .
  • 64 votes
     answers
     views

    信号量 - 初始计数有什么用?

    http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx 要创建信号量,我需要提供初始计数和最大计数 . MSDN声明初始计数是 - 可以同时授予的信号量的初始请求数 . 虽然它声明最大数量是 可以同时授予的信号量的最大请求数 . 我可以理解,最大计数是可以同时访问资源的最大线程数 . 但是,初...
  • 2 votes
     answers
     views

    C - 带信号量的多个叉子

    我最终试图解决 生产环境 者 - 消费者问题,但我首先需要能够使用信号量创建一个关键部分 . 我目前遇到的问题是当我运行程序时,关键部分有时会有多个进程进入它 . 我想在给定时间只有一个进程处于临界区 . 这是我目前的代码: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include &l...
  • 3 votes
     answers
     views

    厕所关键例子中Binary Semaphore和Mutex之间的区别?

    我已经在Stackoverflow上阅读了关于此主题的帖子,但无法理解要点 . 也许我们可以将它们的差异限制在一个具体的例子 带锁的卫生间 . Mutex:一个线程接受密钥进入 . 如果任何其他线程需要进入厕所,他们等待 . 当前所有者出来并将钥匙交给警卫(OS内核),后者将厕所的船主交给另一个人 . 问题陈述:我看到所有人都同意共享资源必须由锁定它的那个线程中的相同互斥锁解锁 . 但对于二进制...
  • 1 votes
     answers
     views

    二进制信号量和互斥量之间有什么区别?

    我想知道二进制信号量和互斥量之间的区别?这些是一样的吗?二进制信号量的值为1和0,锁定和解锁等互斥量 . 我对这些术语感到很困惑 . 我正在谈论应用程序级编程的观点 . 在一次采访中,我被问到这个问题,并向他们解释信号量用于发信号,互斥量用于锁定 . 请用简单的例子来解释 . 我用Google搜索,但后来知道除了上述差异之外,信号量锁可以被其他线程解锁,而互斥锁必须由锁定它的线程解锁 .
  • 0 votes
     answers
     views

    信号量和互斥锁定概念

    我读到了信号量和互斥量之间的区别之一是在互斥锁的情况下,进程/线程(曾经拥有锁)只能释放锁 . 但是在信号量的情况下,任何其他进程都可以释放信号量 . 当一个没有信号量的进程可以释放信号量时,我就会产生怀疑 . 拥有信号量有什么用? 假设我有两个进程A和B.假设进程A有一个信号量并执行一些关键任务 . 现在让我们说进程B发送信号以释放信号量 . 在这种情况下,即使正在执行某项关键任务,进程A是否会...
  • -1 votes
     answers
     views

    使用二进制信号量实现通用信号量

    使用二进制信号量实现的gen信号量: 所以我无法理解为什么我们需要输入信号量,没有它我可以看到它是如何正常工作的 . 多个流程如何进入关键部分?在第一个进程进入后,它会等待(互斥),这意味着没有其他人可以进入,此外还有其他进程在等待信号(互斥) 一般信号量可以允许多个进程进入临界区域,但我无法看到在此代码中如何完成 .

热门问题