Articles of multithreading

java.lang.ArrayIndexOutOfBoundsException:-1

我有一个Java应用程序,它包含两个在不同Java类中创build的线程。 一个线程用于写入图像文件,另一个线程同时读取同一个文件。 两个线程都在同时运行。 但是经过几次尝试,线程被阻塞,并显示以下exception: java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.ArrayList.elementData(ArrayList.java:371) at java.util.ArrayList.get(ArrayList.java:384) at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:373) at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:476) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:597) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1054) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034) at javax.imageio.ImageIO.read(ImageIO.java:1448) at javax.imageio.ImageIO.read(ImageIO.java:1308) at java.lang.Thread.run(Thread.java:722) 在这个例外之后,应用程序自行终止。 如何解决这个问题呢? 我如何在两个不同的Java类中同步这两个线程?

如何以线程友好的方式读取文本文件(字典)

我在一个计算机科学课,我们已经负责在C中创build一个哈希表,并从dictionary.txt文件填充它。 我的一个朋友和我们的程序的成绩/performance有点竞争,所以我们问是否可以使用线程。 100%新线程,但我知道足够实施一个,并注意竞赛条件。 我的问题是,我想尽快读取文件,这意味着线程。 我无法决定如何将其拆分为线程友好的块,而不会损坏文件的完整性。 我不能把它分解成字节,因为我们知道字典中的string不超过50个字符。 我目前唯一的想法是有两个线程,一个在开始,一个在结束时从对端读取,每当他们到达一个换行符,他们把它散列到我的表中。 显然,从头开始的人首先需要翻转string。 我们正在用linux服务器上的gcc编译,如果有帮助的话。

抢先,pthread_spin_lock和atomic内置

根据这个问题, 在这里通过使用pthread_spin_lock是危险的locking关键部分,因为线程可能会被调度程序中断,并且该资源上的其他线程内容可能会被旋转。 假设我决定从pthread_spin_lock切换到通过primefaces内置+ compare_and_swap idion实现的locking:这个事情会改善还是会受到这个问题的困扰? 因为用pthread它似乎没有什么禁用抢占,有什么我可以做的情况下,我使用通过primefaces实现的锁或任何我可以看看? 我有兴趣locking一个小的关键区域。

如何从multithreadingC ++ Linux应用程序安全地运行一个shell脚本?

这是我的问题 – 我有一个multithreading(pthreads)C ++应用程序,其中我有一个主控制循环线程和3个数据采集线程(一个串行端口读取器/写入器和两个TCP套接字连接线程)。 在程序的某些时候,我需要执行一个shell脚本。 我已经做了相当多的研究,并且看到system()是一个选项。 可选的选项似乎表示使用fork()和exec()系列函数。 我期望的问题是使用fork()会导致我的进程被复制,显然这将导致我的通信线程运行的问题不会终止。 由于system()文档指出它在后台使用fork() ,这也意味着我不能使用它。 我对如何进行感到不知​​所措。 有这种问题的最佳实践方法吗? 我可以看到继续进行的唯一可能的方法是尝试直接在C ++代码中创build我需要运行的shell脚本的function。 显然,这样做所需的工时是最不理想的select。 还有其他的select,我可以看看?

multithreading在c。 互斥

我的代码执行以下操作:创buildN个线程,每个线程增加全局variables计数器M次。 我正在使用一个互斥体,以确保计数器的最终值是M * N。 我想观察一下这个没有互斥的情况,为了得到一个不同的值来反击,才能正确评估这个互斥的工作。 我注意到了互斥量,但结果是一样的。 我应该让他们随便睡一会儿吗? 我应该如何处理? #include <stdio.h> #include <pthread.h> #define N 10 #define M 4 pthread_mutex_t mutex; int counter=0; void *thread_routine(void *parameter) { pthread_mutex_lock(&mutex); int i; for (i=0; i<M; i++) counter++; pthread_mutex_unlock(&mutex); } int main(void) { pthread_t v[N]; int i; pthread_mutex_init(&mutex,NULL); for (i=0; i<N; i++) { pthread_create(&v[i],NULL,thread_routine,NULL); } for (i=0; i<N; i++) […]

Linux线程和进程

我有一个关于Linux线程和进程的简单问题。 在Linux中的过程有一个单独的虚拟地址空间,它由 – stack – heap – bss – code/text – data 一个进程可以在它们内部有'n'个线程。我明白它们共享进程的地址空间。但是由于不同线程执行的函数调用可能不同,线程是否有单独的堆栈段。

带有等待队列挂起系统的Linux驱动程序代码

我写了一个示例linux设备驱动程序代码,它将创build两个内核线程,每个线程将增加一个全局variables。 我使用了等待队列来执行递增variables的任务,每个线程将等待等待队列,直到一个定时器到期,每个线程随机唤醒。 但问题是当我插入这个模块,整个系统只是冻结了,我不得不重新启动机器。 每次插入模块时都会发生这种情况。 我试着debuggingkthread代码,看看我是否进入了死锁的情况,但我无法弄清楚代码有什么问题。 任何人都可以告诉我我在做什么错误的代码来获取挂断的情况? #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/errno.h> #include <linux/semaphore.h> #include <linux/wait.h> #include <linux/timer.h> #include <linux/sched.h> #include <linux/kthread.h> spinlock_t my_si_lock; pid_t kthread_pid1; pid_t kthread_pid2 ; static DECLARE_WAIT_QUEUE_HEAD(wqueue); static struct timer_list my_timer; int kthread_num; /* the timer callback */ void my_timer_callback( unsigned long data ){ printk(KERN_INFO "my_timer_callback called (%ld).\n", jiffies […]

在linux服务器上处理多个客户端连接的正确方法是什么?

您好我正在使用TCP在C语言的Linux上写服务器。 服务器必须处理多个连接(最多约5000个)。 5000是最大的,但平均值应该是500 – 1000.我想知道什么是最好的用于处理客户连接和聆听。 如果最好为每个客户端使用一个线程或使用select()函数。 1)线程 – 每个客户端都有自己的线程。 线程正在侦听客户端的请求并处理它。 selectfunction – select一个循环,所有请求正在处理。 (类似于这个http://www.binarytides.com/multiple-socket-connections-fdset-select-linux/ ) 如果我使用线程,则需要大量的内存和CPU性能。 因此,我更喜欢使用select,但我不确定select是否可以处理如此多的连接,以及是否不会减慢来自服务器的响应(有必须通过客户端套接字的循环)。 所以可以使用select来做这么多的客户端吗? 我正在寻找我的答案,但我没有find它,或者我只是不知道要search什么。 所以请不要不高兴 对不起我的英语不好。

线程如何获得互斥锁?

我的问题是关于获取互斥锁的线程。 我们使用pthread_mutex_t锁来确保在multithreading程序中读取/写入时顺序访问variables。 但是pthread_mutex_t lock ; 也是线程之间共享的全局variables。 访问这个全局variables(锁)是否与访问其他全局variables相同? 如果是相同的,那么我们是不是会面对其他全局variables所面临的同样的问题? 如果不是,那么如何访问一个不同于访问其他全局variables的锁数据结构呢? 简而言之:为什么我们不需要locking自己的锁,最终导致鸡与鸡的问题呢?

如何设置程序中OpenMP线程的数量?

作为运行程序 $ OMP_NUM_TRHEADS=4 ./a.out 将活动的OpenMP线程的数量限制为4,如htop 。 但是,如果不是绑定Bash的OMP_NUM_THREADS环境variables,我会调用它 setenv("OMP_NUM_THREADS", "4", 1); 在调用任何启用OpenMP的函数之前,从main调用,这似乎不起作用。 为什么发生这种情况? 如何设置程序中OpenMP线程的数量(如果可能的话)?