【Linux线程调度引起的业务问题】教程文章相关的互联网学习教程文章

c – 嵌入式Linux平台上是否可以使用Posix线程?

有时我读到(如果我没有解释错误)posix线程在sone平台上不可用或有效,例如某些RTOS,它们支持自己的线程机制. 那么,posix线程是否可以被视为标准(至少在通用OS上)?它是平台独立的吗?解决方法:“So, is posix thread can be considered as standard (at least on general purpose OS)?”不,操作系统的标准不支持POSIX线程. 我会说std :: thread实现依赖于一些POSIX线程常用的功能. 嵌入式Linux平台当然是POSIX兼容的,你可以依赖pthr...

c – Linux多线程将涉及pthreads库(在大多数情况下). MSVC使用的等效库是什么?

我需要知道哪些是MSVC用于多线程的API /库.如果有多个,请告诉我哪个是最广泛使用的. 如果我的问题听起来太天真了,那是因为我以前从未做过线程,而且根据我过去的经验,我知道这里有人可以让我开始/指出我正确的方向,从那时起我就可以开始了.解决方法:正如其他人建议您可以使用CreateThread或_beginthread或线程池API,the process and threads reference is best for Win32线程,您也可以使用非常接近C 0x std :: thread标准的boost ::...

c – 如何解决Linux上的线程问题?

我试图在Linux上调试应用程序的问题.它倾向于在libstdc .so或libstdc.so的随机位置与SIGSEGV崩溃. 似乎没有任何明显的竞争条件,因为我添加的线程中的工作非常孤立.但它几乎一直都在崩溃. 应用程序使用g -c … -pthread -D_REENTRANT编译,并与g -pthread -o链接… 但它仍然在libstdc * .so函数中几乎一直崩溃.我已经浪费了几天试图弄清楚什么是错的,但没有去…… 有人有任何提示吗?有没有办法确保libstdc * .so被编译为线程感知?任...

64位Linux上的Java线程堆栈大小【代码】

我的目标是提出可以并行运行的最大线程数.谷歌指出了许多链接,他们通过划分RAM / StackSize来提供简单的数学运算.在64位Linux中,我们将线程堆栈大小定义为10 MB(ulimit -s = 10240kb),RAM为4GB,为操作系统留下1 GB并且使用此数学运算我可以拥有~300个线程,但是小型测试应用程序,我写到最高~32297,然后给出内存不足错误. 我用-Xss尝试了不同的值,但这些值对线程计数几乎没有任何影响,它仍然与~32297相同). 这给了我一个印象,堆栈大小...

c – linux中的pthread_mutex_t是否为reentrancy(如果一个线程试图获取它已经拥有的锁,请求成功)

我来自Java,所以我熟悉同步而不是互斥.我想知道pthread_mutex_t是否也是重入.如果没有,还有另一种机制吗? 谢谢解决方法:这取决于互斥锁类型,默认情况下不进行检查,并且尝试在同一线程中多次锁定它会导致未定义的行为.阅读它here. 您可以创建PTHREAD_MUTEX_RECURSIVE类型的互斥锁,以便能够递归锁定它,这是通过向pthread_mutex_init提供具有所需互斥锁类型的pthread_mutexattr_t来完成的.

为什么在Linux上使用更多线程时内存消耗会增加? (C )

程序: 我为大量数据创建了一个C计算程序,可以在一个或多个线程上运行. (通过配置文件) 程序环境如下:C,OpenMp,Redhat-x64,malloc / free Linux上的结果: >当我在1个线程上运行它时,进程大小为177 MB.>当我在2个线程上运行它时,进程大小为317 MB.>当我在4个线程上运行它时,进程大小为600 MB. Windows上的结果: >无论使用的线程数是多少,处理大小仍然相同,110MB. 题: 为什么在Linux上使用更多线程时内存消耗会增加?解决方法:一...

为什么我在这个带有C(LINUX)线程的小程序中得到这些结果?【代码】

我有一个小程序,我在OS课程的考试科目中找到.void * func (void * p) {int n = p;printf("%d \n",n);return NULL; }int main() {int i;pthread_t t[3];for(i=0; i<3; i+=1)pthread_create(&t[i] ,NULL, func, (void*)i);return 0; }当我运行它时,我得到以下结果(每个数字后面有一个新行):1st run : 0 02nd run : 1 0 2 23rd run : 0 1 1当我只创建3个线程时,为什么它会打印4位数.它怎么打印重复? 该代码在Ubuntu中使用gcc编译.解...

linux – 设置线程/ proc / PID / cmdline?【代码】

在Linux / NPTL上,线程被创建为某种进程. 我可以看到我的一些进程有一个奇怪的cmdline:cat /proc/5590/cmdline hald-addon-storage: polling /dev/scd0 (every 2 sec)你知道如何为我的进程的每个线程做到这一点吗?这对调试非常有帮助. /我现在正在调查HAL来源 谢谢解决方法:如果你想以可移植的方式做到这一点,那么可以在多个Unix变体中使用的东西,可用的选项很少. 你需要做的是你的调用者进程必须使用argv [0]参数调用exec,该参...

linux pthreads中2个线程之间的同步【代码】

在linux中,如何在2个线程之间进行同步(在linux上使用pthreads)?我想,在某些情况下,一个线程将阻塞自己,然后在以后,它将由另一个线程恢复.在Java中,有wait(),notify()函数.我在pthreads上寻找相同的东西: 我已经读过这个,但它只有mutex,有点像Java的synchronized关键字.这不是我想要的.https://computing.llnl.gov/tutorials/pthreads/#Mutexes 谢谢.解决方法:您需要一个互斥锁,一个条件变量和一个辅助变量. 在主题1中:pthread_m...

Linux多线程编程示例

Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux 下pthread的实现是通过系统调用clone()来实现的。clone()是 Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明。下面我们展示一个最简单的 多线程程序 pthread_create.c。一个重要的线程创建函数原型: #...

Linux之线程(day14)【代码】

一、线程的基础 二、线程的创建、退出、分离、汇合 三、线程对共享资源的访问 四、线程的同步 以下线程皆为posix线程一、线程的基础 进程是资源分配的基本单位,线程是执行的基本单位。 一个进程中可以有多个线程,但至少要有一个主线程。 线程共享进程资源。线程切换和线程通讯都很灵活。每个线程都有自己独有的属性。线程的ID(tid)、线程的自己栈帧、自己的信号屏蔽字(但是共享进程的信号的处理函数) 二、线程的创建、退出...

Linux C++多线程同步的四种方式(非常详细)【代码】

背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题?通过多线程模拟多窗口售票为例:#include <iostream> #include<pthread.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h>using namespace std;int ticket_sum=20; void *sell_ticket(void *arg) {for(int i=0; i<20; i++){if(ticket_sum>0){sleep(1);cout<<"sell the "<<20-ticket_sum+1<<"th"<<endl;ticket_sum--;}}return 0; }in...

linux下的线程学习(一)【代码】

原文链接:http://www.cnblogs.com/xuxu8511/p/3360272.html线程标识 #include<pthread.h> int pthread_equal( //用于比较两个线程是否相等 pthread_t tid1, //线程id=tid1 pthread_t tid2);//线程id=tid2 pthread_t pthread_self(void); //用于返回自身的线程id 线程创建 #include<pthread.h> int pthread_create( //用于创建线程 pthread_t *restrict tidp, //线程id const pthread_attr_t *restrict attr,//属性 vo...

linux下的线程学习(二)【代码】

原文链接:http://www.cnblogs.com/xuxu8511/p/3361205.html 1 #include <iostream>2 #include <pthread.h>3 4 void cleanup(void *arg) {5 6 printf("cleanup: %s\n", (char*)arg);7 }8 9 void* thr_fn1(void *arg) { 10 11 printf("thread1 start\n"); 12 pthread_cleanup_push(cleanup, (void*)"thread 1 first handler"); 13 pthread_cleanup_push(cleanup, (void*)"thread 1 second handler"); 14 printf("threa...

为什么linux线程函数在windows中有效?【代码】

我正在用我的Windows机器上的cygwin包中的gcc编译这个程序#include<stdio.h> #include<pthread.h>void* thread_function(void) {printf("hello"); } int main(int argc,char *argv[]) {pthread_t thread_id[argc-1];int i;int status;printf("argc is %d ",argc-1);for(i=0;i<argc-1;i++){pthread_create (&thread_id[i], NULL , &thread_function, NULL);} for(i=0;i<argc-1;i++)pthread_join(thread_id[i],NULL); }它编译并创...