线程操作函数示例

CODE

#include <stdio.h>
#include <thread.h>
#include <errno.h>
#include <synch.h>

void work(void)
{
thread_t tid;
tid = thr_self();
printf("I am a worker thread %d\n",tid);
}

main()
{
int error,i,n;
thread_t tid,mytid;

printf("Enter number of forks:  ");
scanf("%d",&n);
mytid = thr_self();
printf("thread %d creating thread\n",mytid);
for (i=1;i<=n;i++)
 {
 error = thr_create(NULL,0,(void *(*)(void *))work, NULL, 0, &tid);
 printf("created thread %d\n",tid);
 error = thr_join(tid,NULL,NULL);
 printf("joined thread %d\n",tid);
 }
printf("Done forking and joining threads\n");
}


CODE

#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#define LIMIT 100
#define NUMCOUNTERS 10

int sum= 0;

void count(int *arg)
{
int i;
for (i=0;i<*arg;i++) {
 sum++;
 }
}

int main(int argc, char **argv)
{
int error,i;
int numcounters = NUMCOUNTERS;
int limit = LIMIT;
pthread_t tid[NUMCOUNTERS];

if (argc == 1)
 {
 printf("usage: badcount numcounters limit\n");
 exit(1);
 }

if (argc == 2)
 {
 numcounters = atoi(argv[1]);
 }
if (argc == 3)
 {
 numcounters = atoi(argv[1]);
 limit = atoi(argv[2]);
 }

printf("numcounters = %d, limit = %d\n",numcounters, limit);

pthread_setconcurrency(numcounters);
for (i=0;i<numcounters;i++)
 {
 error = pthread_create(&tid[i],NULL,(void *(*)(void *))count,&limit);
 }
for (i=0;i<numcounters;i++)
 {
 error = pthread_join(tid[i],NULL);
 }
printf("Counters finished with count = %d\n",sum);
printf("Count should be %d X %d = %d\n",numcounters,limit,numcounters*limit);
return 0;
}


CODE

#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <synch.h>
#define LIMIT 100
#define NUMCOUNTERS 10
#define MAXCOUNTERS 100

int sum= 0;
pthread_mutex_t lock;

void count(int *arg)
{
int i;
for (i=0;i<*arg;i++)
 {
 pthread_mutex_lock(&lock);
 sum++;
 pthread_mutex_unlock(&lock);
 }
}

int main(int argc, char **argv)
{
int error,i;
int numcounters = NUMCOUNTERS;
int limit = LIMIT;
pthread_t mytid, tid[MAXCOUNTERS];


if (argc == 1)
 {
 printf("usage: goodcount numcounters limit\n");
 exit(1);
 }

if (argc == 2)
 {
 numcounters = atoi(argv[1]);
 }
if (argc == 3)
 {
 numcounters = atoi(argv[1]);
 limit = atoi(argv[2]);
 }

printf("numcounters = %d, limit = %d\n",numcounters, limit);
pthread_setconcurrency(numcounters);
pthread_mutex_init(&lock,NULL);

for (i=1;i<=numcounters;i++)
 {
 error = pthread_create(&tid[i],NULL,(void *(*)(void *))count, &limit);
 }
for (i=1;i<=numcounters;i++)
 {
 error = pthread_join(tid[i],NULL);
 }
printf("Counters finished with count = %d\n",sum);
printf("Count should be %d X %d = %d\n",numcounters,limit,numcounters*limit);
return 0;
}


CODE

#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#define LIMIT 100
#define NUMCOUNTERS 10
#define MAXCOUNTERS 100

int sum= 0;
pthread_mutex_t lock;

void count(int *arg)
{
int i;
int localsum = 0;

for (i=0;i<*arg;i++)
 {
 localsum++;
 }
 pthread_mutex_lock(&lock);
 sum = sum + localsum;
 pthread_mutex_unlock(&lock);
}

int main(int argc, char **argv)
{
int error,i;
int numcounters = NUMCOUNTERS;
int limit = LIMIT;
pthread_t tid[MAXCOUNTERS],mytid;


if (argc == 1)
 {
 printf("usage: bettercount numcounters limit\n");
 exit(1);
 }

if (argc == 2)
 {
 numcounters = atoi(argv[1]);
 }
if (argc == 3)
 {
 numcounters = atoi(argv[1]);
 limit = atoi(argv[2]);
 }

printf("numcounters = %d, limit = %d\n",numcounters, limit);

pthread_setconcurrency(numcounters);
pthread_mutex_init(&lock,NULL);

for (i=1;i<=numcounters;i++)
 {
 error = pthread_create(&tid[i],NULL,(void *(*)(void *))count, &limit);
 }
for (i=1;i<=numcounters;i++)
 {
 error = pthread_join(tid[i],NULL);
 }
printf("Counters finished with count = %d\n",sum);
printf("Count should be %d X %d = %d\n",numcounters,limit,numcounters*limit);
return 0;
}

作者: 蓝色键盘   发布时间: 2003-10-20

,“玉豹”姜新。还有一位就是中原镖局中第一高手,“振威”的总哪里治疗白癜风好绝对保密的。他摆出来作幌子的货已经很象样,除了有限的几个人外哪里治疗白癜风好丁喜叹道:“你能不能少用嘴吹气,多用脑袋想想。”小马道:“能http://daisu401.b2bvip.com/sell/itemid-1723868.shtml:“咱们到保定府来,为的就是要找他?”丁喜道:“嗯。”小马忽哪里治疗白癜风好:“讨人喜欢的丁喜实在不愧是黑道上的第一号智多星,愤怒的小马

作者: dfjaljl   发布时间: 2011-10-26