随笔分类 - UC
摘要:今天学习多线程的第二个例子是取消线程示例,在此程序中,主线程使用pthread_cancel()函数来取消线程。由于子线程首先调用pthread_setcancelstate()函数设置了线程的取消状态为PTHREAD_CANCEL_DISABLE,因此,不可取消子线程,主线程处于等待状态,经过一段时间后,子线程调用pthread_setcancelstate()函数设置了线程的取消状态为PTHREAD_CANCEL_ENABLE,允许取消,从而使主线程能够取消子线程。代码如下:#include<iostream>#include<pthread.h>using nam
阅读全文
摘要:msgget()函数被用来创建新的消息队列或获取已有的消息队列。其函数定义如下:系统调用: msgget()函数声明: int msgget ( key_t key, int msgflg )返回值: message queue identifier on success-1 on error: errno = EACCESS (permission denied)EEXIST (Queue exists, cannot create)EIDRM (Queue is marked for deletion)ENOENT (Queue does not exist)ENOMEM (Not eno
阅读全文
摘要:msgrcv()函数被用来从消息队列中取出消息。它在linux/msg.h中的定义是这样的:系统调用: msgrcv()函数声明: int msgrcv ( int msqid, struct msgbuf *msgp, int msgsz, longmtype,int msgflg )返回值: Number of bytes copied into message buffer-1 on error: errno = E2BIG (Message length is greater thanmsgsz,no MSG_NOERROR)EACCES (No read permission)EFA
阅读全文
摘要:msgsnd()函数是用来向消息队列发送消息的。在linux/msg.h 它的函数定义是这样的:系统调用: msgsnd()函数声明: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg )返回值: 0 on success-1 on error: errno = EAGAIN (queue is full, and IPC_NOWAIT was asserted)EACCES (permission denied, no write permission)EFAULT (msgp address isn'
阅读全文
摘要:fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork( ):子进程与父进程共享数据段 2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec 或exit 之后父进程才可能被调度运行。 3. vfork ()保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。如果在 调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。 下面通过几个例子加以说明: 第一:子进程拷贝父..
阅读全文
摘要:创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include sys/types.h>#include unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。由于子进程与父进程的运行是无关的,父进程可
阅读全文

浙公网安备 33010602011771号