Tag: 线程安全

alloc:invalid block – 对于每个线程的线程Tcl / 1 interp,Tcl_IncrRefCount和Tcl_DecrRefCount线程是否安全?

我们的32位服务器应用程序静态嵌入tcl 8.4.11。 在Red Hat Linux 6.5 64位上,我们遇到崩溃/核心转储。 失败的样子 alloc:无效块:0xf6f00f58:88 f6 0 在问题的底部,我记录了我们见过的两个不同的核心转储。 我们已经将潜在的根本原因隔离到两个线程之间共享的TCL对象,并同时运行单独的TCL解释器实例。 我们认为这是因为TCL对象从这些并发执行的TCL解释器传递给Tcl_IncrRefCount / Tcl_DecrRefCount。 当TCL编译为线程时,Tcl_IncrRefCount / Tcl_DecrRefCount线程是否安全? TCL对象是否由TCL解释器实例共享? 有没有办法在解释器实例之间禁用TCL对象共享? 在TCL版本8.6.3中情况有所改善吗? (gdb) bt #0 __kernel_vsyscall () at arch/x86/vdso/vdso32/sysenter.S:49 #1 0x001b7871 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #2 0x001b914a in abort () at abort.c:92 #3 0x080f611c in Tcl_PanicVA () #4 0x080f613b in Tcl_Panic () #5 0x0810133c […]

旋转锁实现(OSSpinLock)

我刚开始研究multithreading编程和线程安全性。 我熟悉忙碌的等待,经过一些研究,我现在熟悉自旋锁背后的理论,所以我想我会看一下OSSpinLock在Mac上的实现。 它归结为以下函数(在objc-os.h中定义): static inline void ARRSpinLockLock(ARRSpinLock *l) { again: /* … Busy-waiting … */ thread_switch(THREAD_NULL, SWITCH_OPTION_DEPRESS, 1); goto again; } ( 在这里全面实施 ) 在做了一些挖掘之后,我现在已经大致了解了thread_switch的参数是什么( 这个站点是我发现它的地方)。 我对所读内容的解释是,对thread_switch的这一特定调用将切换到下一个可用线程,并将当前线程的优先级降低到1个周期的绝对最小值。 ‘最终’(在CPU时间内)此线程将再次变为活动状态并立即再次执行goto again; 重新开始忙碌等待的指令。 我的问题是,为什么这个电话实际上是必要的? 我在这里找到了另一个自旋锁的实现(对于Windows这次),它根本不包括(Windows等效的)线程切换调用。

线程安全和位域

我知道位字段是依赖于编译器的,但是我没有在最新的g ++和Visual C ++ 2010上找到关于位字段的线程安全性的文档。 位字段成员的操作是primefaces的吗?

ID生成器与本地静态变量 – 线程安全?

下面的代码段是否会在multithreading场景中按预期工作? int getUniqueID() { static int ID=0; return ++ID; } 这些ID不必连续 – 即使它跳过一个值,也没关系。 可以说当这个函数返回时,返回的值在所有线程中都是唯一的吗?

读取/预制系统调用的线程安全性

我在multithreading环境中几乎没有与read()/ pread()系统调用相关的查询 我正在使用基于freeBsd的Mac-OSX,如果这有助于我在读模式下只使用这个文件,而不是读/写而且语言是c / c ++ 假设我们在磁盘AAAABBBBCCCCDDDEEEE上有一个文件…. 和4个字母适合文件的一页 所以Page1:AAAA 第2页:BBBB …..等等 现在我从具有相同文件描述符的两个不同线程发起读取系统调用,我的意图是从线程1读取第一页,从线程2读取第二页,等等。 阅读(FD,浅黄色,的sizeof(页)); 从手册页我明白,读取也会增加文件指针,所以我肯定会得到像#的乱码 ABCC ABBB ..等(没有特别的顺序) 解决这个问题我可以使用pread() “Pread()执行相同的function,但是从文件中的指定位置读取而不修改文件指针”//来自手册页 但我不确定使用pread是否真的会帮助我实现目标,因为即使它没有增加内部文件指针,也无法保证响应不会混乱。 我的所有数据都是页面对齐的,我想从每个线程中读取一页 线程1读取:AAAA线程2读取:BBBB线程3读取:CCCC …没有实际拼接内容.. 我还发现一个post一旦write()返回,从文件中读取是否安全? 但它不是很有用。 我也不确定read()是否真的会有问题,我正在考虑。我正在阅读的文件是一个二进制文件,因此我很难快速手动阅读和validation.. 任何帮助将不胜感激

MSVC错误的线程安全

在MSVC线程安全上是errno吗? 根据这个问题的答案,POSIX要求errno是线程安全的。 但MSVC可能不符合POSIX, MSDN也没有说明线程安全。 MSDN矛盾提到errno被声明为extern int errno; ,还作为#define errno (*_errno())

如何定义线程局部本地静态变量?

如何定义不在不同线程之间共享的本地静态变量(在函数调用之间保持其值)? 我正在寻找C和C ++的答案

可以安全地在线程之间共享整数吗?

在没有任何同步实用程序的情况下,在C程序中的pthread之间使用相同的整数内存位置的多个线程是否存在问题? 为了简化问题, 只有一个线程会写入整数 多个线程将读取整数 这个伪C说明了我的想法 void thread_main(int *a) { //wait for something to finish //dereference ‘a’, make decision based on its value } int value = 0; for (int i=0; i<10; i++) pthread_create(NULL,NULL,thread_main,&value); } // do something value = 1; 我认为它是安全的,因为一个整数占用一个处理器字,读取/写入一个字应该是最primefaces的操作,对吧?

memcpy是否安全?

我在网上看了一眼,无法满足自己的答案。 memcpy线程安全吗? (在Windows中) 我的意思是,如果我使用单个memcpy写入进程之间共享的内存区域(使用boost :: shared_memory_object),然后尝试使用单个memcpy从另一个进程读取该区域,那么将在写入时自动阻止一个进程发生了什么? 我在哪里可以读到这个?

pthread同步阻塞队列

我正在寻找使用pthread同步语义在C中建议的线程安全阻塞队列(多生产者/消费者)的实现。