ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ¹®Á¦
Thread1, Thread2, Thread3, Thread4 ÀÌ·¸°Ô 4°³ÀÇ ¾²·¹µå°¡ ÀÖ´Ù. À̶§ Thread1->Thread2->Thread3->Thread4->Thread1->Thread2... ÀÌ·±½ÄÀ¸·Î ¼ø¼´ë·Î ¾²·¹µå°¡ ÀÛµ¿µÇµµ·Ï ÇØº¸ÀÚ.
´ÙÀ½ÀÇ Á¶°ÇÀ» ¸¸Á·½ÃÄÑ¾ß ÇÑ´Ù.
¾òÀ» ¼ö ÀÖ´Â °ÍÂü°í¹®¼¸Þ½ÃÁöÅ¥ ±¸Çö
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
#include <regex.h>
#include <fcntl.h>
#include <string.h>
#define ThreadNum 4
pthread_mutex_t mutex_lock;
pthread_cond_t sync_cond;
pthread_mutex_t gmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t gcond = PTHREAD_COND_INITIALIZER;
struct Data
{
int msgtype;
int id;
char data[8];
key_t key_id;
};
void *Tfunction(void *data)
{
struct Data lData;
int myid;
lData = *(struct Data *)data;
// ¾²·¹µå µ¿±âÈ
pthread_mutex_lock(&mutex_lock);
usleep(1000);
pthread_cond_signal(&sync_cond);
pthread_mutex_unlock(&mutex_lock);
myid = lData.id;
while(1)
{
if(msgrcv(lData.key_id, (void *)&lData, sizeof(lData), lData.id, 0) == -1)
{
perror("msgrcv thread error: ");
}
if (myid < ThreadNum)
{
lData.msgtype = myid+1;
}
else
{
lData.msgtype = 1;
}
lData.id = myid;
if(msgsnd(lData.key_id, (void *)&lData, sizeof(lData), IPC_NOWAIT) <0)
{
perror("msg snd error");
exit(0);
}
printf("Thread Num %d\n", myid);
usleep(100);
}
}
int main(int argc, char **argv)
{
struct Data lData;
pthread_t p_thread[ThreadNum];
// Message queue
key_t key_id;
// ¸Þ½ÃÁöÅ¥ »ý¼º
key_id = msgget((key_t)8888, IPC_CREAT|0666);
if (key_id == -1)
{
perror("msgget error : ");
exit(0);
}
for (int i = 0; i < ThreadNum; i++)
{
lData.msgtype = i+1;
lData.id = i+1;
lData.key_id = key_id;
printf("Create Thread %d\n", lData.id);
pthread_mutex_lock(&mutex_lock);
pthread_create(&p_thread[i], NULL, Tfunction, (void *)&lData);
pthread_cond_wait(&sync_cond, &mutex_lock);
pthread_mutex_unlock(&mutex_lock);
}
lData.msgtype = 1;
if(msgsnd(key_id, (void *)&lData, sizeof(lData), IPC_NOWAIT) <0)
{
perror("msg main snd error");
exit(0);
}
while(1)
{
sleep(1);
}
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|