多线程编程初试
来源:互联网 发布:linux修改ssh默认端口 编辑:程序博客网 时间:2024/05/21 18:44
主要有这么几个函数
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func) (void *),void *arg);
int pthread_join (pthread_t tid, void ** status);
pthread_t pthread_self (void);
int pthread_detach (pthread_t tid);
void pthread_exit (void *status);
一个小例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <errno.h>
#include <semaphore.h>
#define BUFFSIZE 4
#define NUMBER 8
int sumOfNumber = 0;
sem_t writeResNumber;
sem_t readResNumber;
struct RecycleBuffer{
int buffer[BUFFSIZE];
int head, tail;
}reBuf;
pthread_mutex_t bufferMutex = PTHREAD_MUTEX_INITIALIZER;
static void *Producer (void *arg)
{
int i;
for (i = 0; i < NUMBER; i++)
{
sem_wait (&writeResNumber);
pthread_mutex_lock (&bufferMutex);
reBuf.buffer [reBuf.tail] = i;
reBuf.tail = (reBuf.tail + 1) % BUFFSIZE;
printf ("procuder %d write %d \n", pthread_self (), i);
pthread_mutex_unlock (&bufferMutex);
sem_post (&readResNumber);
}
return NULL;
}
static void *Consumer (void *arg)
{
int i, num;
for (i = 0; i < NUMBER; i++)
{
sem_wait (&readResNumber);
pthread_mutex_lock (&bufferMutex);
num = reBuf.buffer[reBuf.head + 1] % BUFFSIZE;
printf ("constumer %d read %d\n", pthread_self (), num);
pthread_mutex_unlock (&bufferMutex);
sumOfNumber += num;
sem_post (&writeResNumber);
}
return NULL;
}
int main (int argc, char *argv[])
{
pthread_t p_tid;
pthread_t c_tid;
int i;
reBuf.head = 0;
reBuf.tail = 0;
for (i = 0; i < BUFFSIZE; i++)
reBuf.buffer[i] = 0;
sem_init (&writeResNumber, 0, BUFFSIZE);
sem_init (&readResNumber, 0, 0);
pthread_create (&p_tid, NULL, Producer, NULL);
pthread_create (&c_tid, NULL, Consumer, NULL);
pthread_join (p_tid,NULL);
pthread_join (c_tid, NULL);
printf ("The sum of number is %d\n", sumOfNumber);
return 0;
}
编译时需带上 pthread.a
cc 123.c -lpthread -o 123即可
- 多线程编程初试
- .NET WMI 编程初试
- 初试MFC编程
- 初试编程+算法
- NDK编程初试
- 链式编程初试
- 初试idea编程
- 初试MFC--基于Dialog编程
- 初试PL/SQL并行编程
- 初试CGI编程--python篇
- 面试题多线程轮流打印ABC初试
- 初试
- 初试
- 初试
- 初试
- java并发编程之synchronization初试
- Linux学习之初试编程基础
- 注册表编程之初试牛刀
- Android webview中拦截超链接
- 软件开发需求分析究竟应该由谁来做
- android应用开机自动运行程序
- 使用 SCons 轻松建造程序
- 记录些比较好的blog 空间 网站
- 多线程编程初试
- 智能DNS
- 动态调用WEBSERVICE,减少改WS就要重新生成代理类
- android menu.addIntentOptions 添加动态菜单
- POJ 1465 Multiple
- java基础问题---多线程有几种实现方法
- MAC下破解《欧路词典》使用次数限制
- 发送激活邮件
- android 使用webview.copyBackForwardList()来进行判断是否是在当前页打开的链接