linux c 大全,linux c 程序设计大全(吴岳) 求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#define MAX_ITEM 3 /* 每次最多取三个任务 */

typedef struct job * Job;

/* 链表结点结构 */

struct job{

pthread_t tid; /* 线程ID */

Job next; /* 下一个链表结点 */

int val; /* 结点值 */

};

pthread_mutex_t q_lock = PTHREAD_MUTEX_INITIALIZER; /* 全局变量锁 */

int insert(Job *head, int val, pthread_t tid)

{

Job p, q;

p = *head; /* 头指针 */

if(p != NULL){ /* 判断空链表的情况 */

while(p->next != NULL){

p = p->next;

}

}

q = (struct job *)malloc(sizeof(struct job)); /* 为结点分配内存空间 */

if(q == NULL){

perror("fail to malloc");

return -1;

}8

q->next = NULL;

q->val = val;

q->tid = tid; /* 设置结点的所有者,线程1 */

p->next = q; /* 将结点链入任务队列 */

if(p == NULL){ /* 设置链表头指针 */

*head = q;

return 0;

}

p->next = q; /* 插入到队列中 */

return 0;

}

void get_job(Job head, Job task, int *count)

{

struct job *p, *q;

pthread_t tid;

q = head; /* 参数是任务队列头 */

p = q->next; /* 指针p作为q的后继,两个指针共同前进 */

tid = pthread_self();

while(p != NULL){ /* 便利链表,判断每个任务结点 */

if(tid == p->tid){ /* 找到属于当前线程的任务结点 */

q->next = p->next;

p->next = task; /* 将该结点从原始的任务队列中摘下 */

task = p; /* 链入到新的当前线程的任务队列上去 */

p = q->next;

*count++; /* 已取任务是递增 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值