如何用vs2012做网站,做标签网站是什么,网站开发学些什么软件,清洁海绵的网站怎么做From: http://blog.163.com/onx0320126/blog/static/164736436201252574720314/ 对于Linux线程#xff0c;也许大家并不陌生#xff0c;而我们通常所说的线程是指基于POSIX标准的线程#xff0c;而Linux下除了兼容POSIX标准#xff0c;而且提供线程在内核级的支持。早在Lin…From: http://blog.163.com/onx0320126/blog/static/164736436201252574720314/ 对于Linux线程也许大家并不陌生而我们通常所说的线程是指基于POSIX标准的线程而Linux下除了兼容POSIX标准而且提供线程在内核级的支持。早在Linux kernel2.4之前Linux的线程LinuxThread属于用户级内核根本不知道线程的存在为了得到内核的支持2003 年Redhat公司很了不起的一个公司发布了NPTL(Native POSIX Thread Library)至今广泛使用。NPTL很优秀对信号的处理是按照每进程的原则进行的getpid() 会为所有的线程返回相同的进程 ID。例如如果发送了 SIGSTOP 信号那么整个进程都会停止使用 LinuxThreads只有接收到这个信号的线程才会停止。这样可以在基于 NPTL 的应用程序上更好地利用调试器例如 GDB。额外话说多了下面具体看看下面如何获得线程的ID吧经常我们需要在程序一个线程中获得这个线程的id有人会说可以通过pthread_create函数传递参数传入等主线程创建子线程成功那么这个pid会自动赋值#define TNUM 2 struct BN { pthread_t pid; int N; }; void *run(void *args) { BN *recive (BN *)args; cout pid: recive-pid endl; return (void *)(recive-N); } int main(int c, char *v[]) { int i; int ret; char *result; pthread_t pid[TNUM]; BN bn[TNUM]; for (i 0; i TNUM; i ) { bn[i].pid pid[i]; bn[i].N mN; ret pthread_create(pid[i], NULL, run, bn[i]); //...出错处理 } return 0; } 难题是主线程去分配子线程id的时刻run函数并不能很确切的知道所以当读取recive-pid时就会产生错误正确的方法应该使用pthread_self()函数来获得POSIX的线程id此函数调用内部进制直到pid分配完成。有人会问获取进程id的函数不是getpid(),获取线程id的函数不是gettid()么这里与刚才前面所说的有些关系目前gettid获得的pid是需要系统调用(syscall)的这个syscall返回的pid不是上面所说的POSIX线程id这个是内核的线程id具体调用的方式如下pid_t pid syscall(SYS_gettid); 或pid_t pid syscall(__NR_gettid); 或//仅限于i386如果是x86_64则调用186 pid_t pid syscall(224); 以往旧的方式syscallx的调用已经被废弃。看到这里也许有人会问pid_t和pthread_t可以相互转换么一个是POSIX的线程、一个是内核的线程如果你感兴趣在这方面研究的话可以不妨试试答案肯定是可以的。至此你看完这篇文章明白了linux线程id怎么获得了么