C에서 FIFO를 구현하고 있습니다. 하나의 스레드가 FIFO에 쓰고 있고 다른 스레드가 읽고 있습니다.다중 스레드 응용 프로그램에서 다른 함수의 실행을 일시 중단합니다.
#define BUFFER_LENGTH 1000
struct Frame
{
char data[1024];
unsigned int data_len;
struct Frame* frame;
};
struct Frame * get_from_fifo()
{
if (!fifo_length)
{
first = last = NULL;
return NULL;
}
struct Frame* frame = first;
first = first->frame;
fifo_length--;
return frame;
}
int add_to_fifo (const char* data, unsigned int frame_size)
{
if (fifo_length >= BUFFER_LENGTH)
{
ast_log(LOG_ERROR, "Buffer full\n");
return SURESH_ERROR;
}
struct Frame* frame = malloc(sizeof (struct Frame));
frame->data_len = frame_size;
memcpy(frame->data, data, frame_size);
if (last)
{
last->frame = frame;
last = frame;
}
if (!first)
{
first = last = frame;
}
fifo_length++;
return SURESH_SUCCESS;
}
는 어떻게 * add_to_fifo * 기능을 방지 할 수 있고 * get_from_fifo * 다른 스레드에 의해 동시에 호출 할 수 있습니다. 즉 * get_from_fifo *는 다른 스레드가 * add_to_fifo * 및 vice verca를 실행하지 않을 때만 호출해야합니다.