Tag: 并发

静态变量和线程(C)

我知道在C中的函数中声明一个静态变量意味着该变量在函数调用之间保留其状态。 在线程的上下文中,这是否会导致变量在多个线程上保持其状态,或者在每个线程之间具有单独的状态? 这是过去的纸质考试问题,我正在努力回答: 以下C函数旨在用于为其调用者分配唯一标识符(UID): get_uid() { static int i = 0; return i++; } 解释get_uid()在multithreading调用它的环境中可能以何种方式正常工作。 使用特定示例方案,详细说明可能发生此类错误行为的原因和方式。 目前我假设每个线程都有一个单独的变量状态,但我不确定这是否正确,或者答案是否与缺少互斥有关。 如果是这种情况,那么在这个例子中如何实现信号量呢?

如何为TMS320F2812 DSP编写内存屏障?

我查看了TI C / C ++编译器v6.1用户指南( spru514e ),但没有找到任何内容。 asm语句似乎没有提供这方面的任何内容,手册甚至警告不要更改变量值(p132)。 未实现用于声明对变量的影响的GNU扩展(p115)。 我也没有发现内存障碍的内在障碍(比如Keil的armcc中的__memory_changed() )。 搜索网络或TI论坛也没有任何结果。 任何其他提示如何进行?

C / C ++编译器能否通过pthread库调用合法地在寄存器中缓存变量?

假设我们有以下代码: #include #include #include void guarantee(bool cond, const char *msg) { if (!cond) { fprintf(stderr, “%s”, msg); exit(1); } } bool do_shutdown = false; // Not volatile! pthread_cond_t shutdown_cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t shutdown_cond_mutex = PTHREAD_MUTEX_INITIALIZER; /* Called in Thread 1. Intended behavior is to block until trigger_shutdown() is called. */ void wait_for_shutdown_signal() { int res; […]

穿越C语言,跨平台

我正在处理当前在单个线程上运行的现有项目(在C中),我们希望在多个平台上运行并且具有多个线程。 希望有一个库,因为,恕我直言,Win32 API就像反复盯着自己的眼睛。 我知道Boost.Thread for C ++,但是,这必须是C(并且可以在MinGW和gcc上编译)。 对不起,Cygwin不是一个选择。

C中的primefaces读数

根据Are C ++读取和写入int Atomic? ,由于处理器缓存的问题,int的读取(以及因此指针 – 或者我认为)在C中不是primefaces的。所以,我的问题是是否有一些我可以用来制作读取primefaces的汇编,或者我需要使用锁吗? 我查看了几组primefaces操作库,到目前为止,我无法找到primefaces读取的函数。 编辑:编译器: Clang 2.9 编辑:平台: x86(64位) 谢谢。

哪些绿色线程库可用于C,可以匹配Haskell绿色线程的性能和易用性?

在Haskell中编程时,我习惯于依赖GHC的forkIO来实现可移植的轻量级线程。 什么是C的等效库,可以提供相同的可扩展性和易用性? 具体来说,我需要C等价物至少以下两个function。 forkIO :: IO () -> IO ThreadId killThread :: ThreadId -> IO () 我假设我的应用程序,如果线程只打开阻塞操作而不是被强制挂起就足够了,因为所有线程都经常阻塞网络IO而我只使用splice系统调用来要求Linux内核在套接字之间推送数据。 更新 本文比较了数字和表格 GNU Pth Protothreads PM2包裹 结果有利于Protothreads。 由于我没有使用任何其他图书馆,我很乐意听到任何使用/开发此类图书馆的人。

使用volatile作为primefaces

如果我有这样的东西…… volatile long something_global = 0; long some_public_func() { return something_global++; } 当使用多个线程访问时,期望此代码不会中断(竞争条件)是否合理? 如果它不是标准的,它仍然可以作为现代编译器的合理假设吗? 注意:所有我使用它的原因是primefaces增量和减量 – 没什么比这更好的了。

信号量和并发编程

对于家庭作业,我需要编写以下场景。 这将使用BACI(即C–)使用信号量完成 有2个男女皆宜的洗手间,每个可容纳4人。 由于它是男女皆宜的,只有同性别的人可以同时进入洗手间,而FIFO并不重要。 我有一个基本的“算法”在我的头脑中处理4个男人和4个女人为1个厕所。 但我不知道如何编码。 任何帮助将不胜感激。 这就是我所拥有的。 Woman: Check to see if there are any men in the restroom. If so “wait”. If no men check to see if there are 4 people. If so “wait”. If no men and not 4 use restroom. When leaving signal there is a vacancy. If last woman […]

SQLite3和多个进程

当多个进程访问单个SQLite数据库文件时,如何确保正确性?

Peterson Lock算法的测试实现?

有谁知道Peterson的锁定算法在C中的良好/正确实现? 我似乎无法找到这个。 谢谢。