Tag: multithreading

内存中的静态和全局变量

存储在堆栈本身的静态变量是否类似于全局变量? 如果是这样,它们如何受到保护以仅允许本地类访问? 在multithreading上下文中,是否担心这个内存可以被其他线程/内核直接访问? 或者为什么我们不能在多进程/线程环境中使用static / global?

C编程:使用pthreads进行调试

我最初调整到的最困难的事情之一就是我第一次使用C语言编写C语言的强烈经验。我习惯于确切知道下一行代码的运行方式是什么,而且我的大多数调试技术都围绕着这种期望。 在C中用pthreads调试有哪些好的技巧? 您可以建议个人方法,无需任何添加工具,使用的工具或任何其他有助于您调试的方法。 PS我在linux中使用gcc进行C编程,但不要让它限制你的答案

使用CAS以primefaces方式递增两个整数

显然,可以使用比较和交换指令以primefaces方式递增两个整数。 这个谈话声称存在这样的算法,但它没有详细说明它的样子。 如何才能做到这一点? (注意,一个接一个地递增整数的明显解决方案不是primefaces的。另外,将多个整数填充到一个机器字中并不算数,因为它会限制可能的范围。)

编译器有时可以缓存声明为volatile的变量

据我所知,编译器从不优化声明为volatile的变量。 但是,我有一个像这样声明的数组。 volatile long array[8]; 不同的线程读写它。 数组的元素仅由其中一个线程修改,并由任何其他线程读取。 但是,在某些情况下,我注意到即使我从一个线程修改一个元素,读取它的线程也不会注意到这个变化。 它继续读取相同的旧值,就好像编译器已将其缓存在某处。 但是编译器本身不应该缓存一个volatile变量,对吗? 那怎么会发生这种情况。 注意 :我没有使用volatile进行线程同步,所以请停止给我答案,比如使用锁或primefaces变量。 我知道volatile,atomic变量和互斥量之间的区别。 另请注意,该体系结构是x86,具有主动缓存一致性。 另外,在我认为变量被其他线程修改之后,我已经读了足够长的时间。 即使经过很长一段时间,阅读线程也看不到修改后的值。

multithreading程序中的意外输出

以下是使用pthreads的程序。 #include // posix threads #include #include /* to compile use -lpthread */ void * sample_thread(void *); #define MAX 10 int main() { pthread_t tid; pthread_attr_t attr; int k; pthread_attr_init(&attr); // set default attributes pthread_create(&tid, &attr, sample_thread, NULL); // create new thread // sample_thread will run as the new thread for(k=0; k<MAX; k++) { printf("Hi […]

杀死一个以popen开始的进程

在使用popen打开管道进程后,有没有办法杀死已启动的进程? (使用pclose不是我想要的,因为它会等待进程完成,但我需要杀死它。)

非阻塞pthread_join

我正在对multithreading服务器的关闭进行编码。如果一切顺利,所有线程都应该自行退出,但是线程卡住的可能性很小。在这种情况下,使用非阻塞连接会很方便所以我能做到。 有没有办法做一个非阻塞的pthread_join? 某种定时加入也会很好。 像这样的东西: foreach线程 nb_pthread_join(); 如果还在运行 pthread_cancel可以(); 我可以考虑更多的情况,其中一个非bloking连接将是有用的。 因为似乎没有这样的function所以我已经编写了一个解决方法,但它并不像我想的那么简单。

如何同时从多个线程访问MySQL

我们正在做一个MySQL的小基准测试,我们希望看看它对我们的数据的执行情况。 该测试的一部分是看多个并发线程使用各种查询来破坏服务器时它是如何工作的。 MySQL文档 (5.0)对multithreading客户端并不十分清楚。 我应该指出我确实链接了线程安全库( libmysqlclient_r.so ) 我正在使用预处理语句并执行read(SELECT)和write(UPDATE,INSERT,DELETE)。 我应该为每个线程打开一个连接吗? 如果是这样的话:我怎么做呢…似乎mysql_real_connect()返回我调用mysql_init()时得到的原始数据库句柄 如果没有:我如何确保结果和方法,如mysql_affected_rows返回正确的值,而不是与其他线程的调用冲突(互斥/锁可以工作,但感觉不对)

主线程退出,还有其他退出吗?

我在同一个进程中有关于主线程和其他线程的问题。 当主函数返回时,其他线程也退出? 我有些困惑。 我写了一些测试代码,如下所示: void* test1(void *arg) { unsigned int i = 0; while (1){ i+=1; } return NULL; } void* test2(void *arg) { long double i = 1.0; while (1){ i *= 1.1; } return NULL; } void startThread ( void * (*run)(void*), void *arg) { pthread_t t; pthread_attr_t attr; if (pthread_attr_init(&attr) != 0 […]

找不到C11 GCC threads.h?

以下代码 #include 给我这个错误: fatal error: threads.h: No such file or directory 使用最新的GCC和Clang -std = c11。 GCC和Clang不支持C11线程吗? 或者是否有一个黑客(或安装的东西)来获得它? 我只是使用Ubuntu 14.04和Ubuntu repo中的gcc和clang包。