91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

linux c 開發中多線程的典型實例,可在linux平臺直接運行,通過實踐熟悉理解多線程工作原理。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?“errors.h“

typedef?struct?alarm_tag
{
struct?alarm_tag?*link;
int ?seconds;
time_t ?time;
char ?message[64];
}alarm_t;

pthread_mutex_t?alarm_mutex?=?PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t?alarm_cond?=?PTHREAD_COND_INITIALIZER;
alarm_t?*alarm_list?=?NULL;
time_t?current_alarm?=?0;

void?alarm_insert(alarm_t?*alarm)
{
int?status;
alarm_t?**last*next;
last?=?&alarm_list;
next?=?*last;
while(next?!=?NULL)
{
if(next->time?>=?alarm->time)
{
alarm->link?=?next;
*last?=?alarm;
break;
}
last?=?&next->link;
next?=?next->link;
}
if(next?==?NULL)
{
*last?=?alarm;
alarm->link?=?NULL;
}
#ifdef?DEBUG
printf(“[list:?“);
for(next?=?alarm_list;next?!=?NULL;next?=?next->link)
printf(“%d(%d)[\“%s\“]“next->timenext->time-time(NULL)next->message);
printf(“]\n“);
#endif
if(current_alarm?==?0?||?alarm->time? {
current_alarm?=?alarm->time;
status?=?pthread_cond_signal(&alarm_cond);
if(status?!=?0)
err_abort(status“Signal?cond“);
}

}

void?*alarm_thread(void?*arg)
{
alarm_t?*alarm;
struct?timespec?cond_time;
time_t?now;
int?statusexpired;
status?=?pthread_mutex_lock(&alarm_mutex);
if(status?!=?0)
err_abort(status“Lock?mutex“);
while(1)
{
?current_alarm?=?0;
?while(alarm_list?==?NULL)
{
status?=?pthread_cond_wait(&alarm_cond&alarm_mutex);
if(status?!=?0)
err_abort(status“Wait?on?cond“);
}
alarm?=?alarm_list;
alarm_list?=?alarm->link;
now?=?time(NULL);
expired?=?0;
if(alarm->time?>?now)
{
#ifdef?DEBUG
printf(“[waiting:?%d(%d)\“%s\“]\n“alarm->timealarm->time-time(NULL)alarm->message);
#endif
cond_time.tv_sec?=?alarm->time;
cond_time.tv_nsec?=?0;
current_alarm?=?alarm->time;
while(current_alarm?==?alarm->time)
{
status?=?pthread_cond_timedwait(&alarm_cond&alarm_mutex&cond_time);
if(status?==?ETIMEDOUT)
{
expired?=?1;
break;
}
if(status?!=?0)
err_abort(status“Cond?timedwait“);
}
if(!expired)
alarm_insert(alarm);
}
else
expired?=?1;
if(expired)
{
printf(“(%d)?%s\n“alarm->secondsalarm->message);
free(alarm);
}
}
}

int?main(int?argcchar?*argv[])
{
int?status;
char?line[128];
alarm_t?*alarm;
pthread_t?thread;

status?=?pthread_create(&threadNULLalarm_threadNULL);
if(status?!=?0)
err_abort(status“Create?alarm?thread“);
while(1)
{
printf(“Alarm>?“);
if(fgets(linesizeof(line)stdin)?==?NULL)
exit(0);
if(strlen(line)?<=?1)
continue;
alarm?=?(alarm_t?*)malloc(sizeof(alarm_t));
if(alarm?==?NULL)
{
errno_abort(“Allocate?alarm“);
}
if(sscanf(line“%d?%64[^\n]“&alarm->secondsalarm->message)? {
fprintf(stderr“Bad?command\n“);
free(alarm);
}
else
{
status?=?pthread_mutex_lock(&alarm_mutex);
if(status?!=?0)
err_abort(

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-08-01?15:23??linux?c?多線程\
?????文件????????3215??2012-08-01?15:22??linux?c?多線程\alarm_cond.c
?????文件?????????469??2012-08-01?15:23??linux?c?多線程\errors.h

評論

共有 條評論