Tag: pthreads

android上的pthread_create警告

在调用pthread_create函数后,我收到下一条消息: W / libc(26409):pthread_create sched_setscheduler调用失败:不允许操作 用于创建线程的代码是: pthread_attr_t threadAttr; int ret = pthread_attr_init(&threadAttr); //code to check ret – it’s 0 size_t guard_size = 0; pthread_attr_getguardsize(&threadAttr, &guard_size); ret = pthread_attr_setstacksize(&threadAttr, myStackSize + guard_size); //code to check ret – it’s 0 ret = pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED); //code to check ret – it’s 0 ret = pthread_attr_setschedpolicy(&threadAttr, SCHED_FIFO); //code to […]

使用multithreading的矩阵乘法?

我应该使用线程乘以2个矩阵。 两件事:我在运行程序时一直保持0。 我也得到消息错误(对于每一个,它都说“警告:在粗体线上传递’printMatrix’的参数1来自不兼容的指针类型”(我尝试打印输出)。另外要注意,第一个块是粗体,我这是我尝试解决问题。我想我很接近,但我可能不会。有人可以帮忙吗?谢谢:)输出看起来像这样:A = 1 4 2 5 3 6 B = 8 7 6 5 4 3 A * B = 0 0 0 0 0 0 0 0 0 #include #include #include #define M 3 #define K 2 #define N 3 struct v { int i; //row int j; //column }; int A[M][K] […]

输入void void *(*)(void *)为void(*)(void)

作为赋值的一部分,我试图创建一个像pthreads这样的用户级线程库。 为了处理线程之间的上下文切换,我使用’swapcontext’函数。 在使用它之前,我必须使用’makecontext’函数创建一个上下文。 ‘makecontext’需要一个返回类型为void且参数类型为(void)的函数指针。 然而,线程函数必须是void* thread_func (void*) 有没有办法进行类型转换? 或者是否有其他方法在用户级别进行上下文切换?

创建线程时设置CPU关联

我想创建一个C ++ 11线程,我希望它在我的第一个核心上运行。 我发现pthread_setaffinity_np和sched_setaffinity可以改变线程的CPU亲和性并将其迁移到指定的CPU。 但是,在线程运行后,此关联性规范会发生更改。 如何创建具有特定CPU关联性的C ++ 11线程( cpu_set_t对象)? 如果在初始化C ++ 11线程时无法指定关联, 那么如何在C中使用pthread_t呢? 我的环境是Ubuntu上的G ++。 一段代码表示赞赏。

C – exec是否必须在multithreading进程中立即执行fork?

情况:我有一个用C编写的multithreading程序。如果其中一个线程分叉,子进程被另一个用exec()替换,父进程等待子进程退出。 问题:在fork()创建子进程之后,有几行代码可以编译要在以下exec()命令中使用的参数。 假设我假设在由fork()创建的子进程和被exec()替换之间的时间内,子进程 – 作为父进程的副本 – 将具有父进程的所有线程,因此这些正确线程会运行 – 尽管只是很短的一段时间? 如果是这样,在fork()之后立即调用exec()的正确解决方案是什么?

C线程编程 – 增加共享变量

嘿伙计……所以我试图刷新我的C线程,我发现的一个问题是: 给定全局变量int x = 0; 实现函数void useless(int n),它创建n个线程,在循环中将x增加1,每个线程在x达到100时终止。 我只是没有线程处理,需要一个坚实的例子来建立我的基础。 这必须尽可能使用pthread系统调用。

我可以使用pthreads为不同的线程调用nvme的ioctl()(系统调用)

我正在为nvme-cli开发一个测试工具(用c编写,可以在linux上运行)。 我有兴趣用’t’个线程重复一个nvme命令’r’次。 下面的代码重复执行命令和线程,但问题是并行执行时间与串行执行相比非常高。 根据我的观察,原因是从err = nvme_identify(fd, 0, 1, data);调用ioctl()系统调用err = nvme_identify(fd, 0, 1, data); 即nvme_identify()调用ioctl() 。 所以我可以知道ioctl()是否阻止了nvme? 我也可以通过线程减少执行时间(解决方案)吗? int repeat_cmd(int fd, void *data, int nsid,int cmd, int rc, int flags, struct repeatfields *rf, int threadcount) { pthread_t tid[threadcount]; int err, i=0,j=0; struct my_struct1 my_struct[threadcount]; switch(cmd){ case 1 : for (j=0; j <threadcount; j++) { my_struct[j].fd […]

在系统调用内核时是否可以抢占线程?

我正在运行2个线程(假设它们暂时是pthreads)。 Thread_1()进行用户定义的API调用,最终在内核中完成一些工作。 Thread_2()完全在用户空间中。 我的问题是:在API调用正在进行时,Thread_2()可以通过抢占Thread_1()来开始执行,控件是在内核中的某个地方吗? 如果不是,为什么,如果我希望这种情况发生(出于任何原因),我该怎么办?

在pthreads中唤醒单个线程而不是忙等待

我不确定这个标题是否反映了我在这里所要求的内容,但是如果没有一个非常强大的标题我就能做到最好。 我正在尝试在pthreads实现一个worker thread模型。 我想从main函数中生成一组线程,然后main线程将作业委托给worker并等待所有线程完成,然后再将它们分配给下一个作业(实际上,要求是将线程排列在一个块中像CUDA编程模型,但在CPU上。虽然它与当前的问题无关)。 job数组用于指示每个线程的作业类型。 目前,我已经使用信号量实现了这一点,这使得繁忙的等待。 我正在寻找方法来使线程进入睡眠状态,只有在需要时才会唤醒,而不是连续轮询。 每个线程执行的function volatile int jobs[MAX_THREADS]; // global job indicator array sem_t semaphore; // semaphore to indicate completion thread_execute(void *args) { tid = get_id(args); while(jobs[tid] != -1) { if(jobs[tid] == 0) continue; // no job if(jobs[tid] == JOBS_1) { jobs1(); jobs[tid] = 0; // go back to idle state sem_post(&semapahore); […]

安全线程堆栈大小?

我正在编写一些产生相当multithreading的代码(目前约为512个,但未来可能会更高)。 每个线程只执行少量操作,因此我希望线程在系统上的开销保持在最低限度。 我使用pthread_attr_setstacksize()设置堆栈大小,我可以从PTHREAD_STACK_MIN获得最小允许堆栈大小。 但我的问题是: 将PTHREAD_STACK_MIN用于线程堆栈大小是否安全? 我如何计算我需要多少堆栈? 是否有任何隐藏的开销需要添加到我的计算中? 另外,还有其他技术可以用来减少线程在系统上的负担吗?