void *thr2()
{
	__CS_cs(); if (__CS_ret != 0) return 0;
	flag2[__CS_round] = 1;
	__CS_cs(); if (__CS_ret != 0) return 0;
	while (flag1[__CS_round] >= 1)
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		if (turn[__CS_round] != 1)
		{
			__CS_cs(); if (__CS_ret != 0) return 0;
			flag2[__CS_round] = 0;
			__CS_cs(); if (__CS_ret != 0) return 0;
			while (turn[__CS_round] != 1)
			{
				__CS_cs(); if (__CS_ret != 0) return 0;
			}
			__CS_cs(); if (__CS_ret != 0) return 0;
			;
			__CS_cs(); if (__CS_ret != 0) return 0;
			flag2[__CS_round] = 1;
			__CS_cs(); if (__CS_ret != 0) return 0;
		}
		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	x[__CS_round] = 1;
	__CS_cs(); if (__CS_ret != 0) return 0;
	if (!(x[__CS_round] >= 1))
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		__CS_ERROR: __CS_error = 1; __CS_ret = __CS_ret_ERROR; return 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
	goto __CS_ERROR;

	}

	__CS_cs(); if (__CS_ret != 0) return 0;
	;
	__CS_cs(); if (__CS_ret != 0) return 0;
	turn[__CS_round] = 1;
	__CS_cs(); if (__CS_ret != 0) return 0;
	flag2[__CS_round] = 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
}
void *main_thread(void *arg)
{
	__CS_pthread_t id1;
	__CS_pthread_t id2;
	__CS_cs(); if (__CS_ret != 0) return 0;
	enqueue_flag[__CS_round] = 1;
	__CS_cs(); if (__CS_ret != 0) return 0;
	dequeue_flag[__CS_round] = 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
	init(&queue[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	if ((!empty(&queue[__CS_round])) == (-1))
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		goto __CS_ERROR;
		__CS_cs(); if (__CS_ret != 0) return 0;
		__CS_ERROR: __CS_error = 1; __CS_ret = __CS_ret_ERROR; __CS_error_detail = __ERR_ERROR_LABEL_REACHED; return 0;
		__CS_cs(); if (__CS_ret != 0) return 0;
		;

		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_init(&m[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&id1, 0, t1, &queue[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&id2, 0, t2, &queue[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(id1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(id2, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	}
void *main_thread(void *arg)
{
	__CS_pthread_t t1;
	__CS_pthread_t t2;
	__CS_cs(); if (__CS_ret != 0) return 0;
	num[__CS_round] = 1;
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_init(&m[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_cond_init(&empty[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_cond_init(&full[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t1, 0, thread1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t2, 0, thread2, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(t1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(t2, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	if (num[__CS_round] != 1)
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		__CS_ERROR: __CS_error = 1; __CS_ret = __CS_ret_ERROR; return 0;
		__CS_cs(); if (__CS_ret != 0) return 0;
		goto __CS_ERROR;

		__CS_cs(); if (__CS_ret != 0) return 0;
		;
		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	}
void *t1(void *arg)
{
	int value;
	int i;
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_lock(&m[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	if (enqueue_flag[__CS_round])
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		for (i = 0; i < 20; i++)
		{
			__CS_cs(); if (__CS_ret != 0) return 0;
			value = nondet_int();
			__CS_cs(); if (__CS_ret != 0) return 0;
			enqueue(&queue[__CS_round], value);
			__CS_cs(); if (__CS_ret != 0) return 0;
			stored_elements[__CS_round][i] = value;
			__CS_cs(); if (__CS_ret != 0) return 0;
		}
		__CS_cs(); if (__CS_ret != 0) return 0;
		enqueue_flag[__CS_round] = 0;
		__CS_cs(); if (__CS_ret != 0) return 0;
		dequeue_flag[__CS_round] = 1;
		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_unlock(&m[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	return 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
}
void *t2(void *arg)
{
	int i;
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_lock(&m[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	if (dequeue_flag[__CS_round])
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		for (i = 0; i < 20; i++)
		{
			__CS_cs(); if (__CS_ret != 0) return 0;
			if (empty(&queue[__CS_round]) != (-1))
			{
				__CS_cs(); if (__CS_ret != 0) return 0;
				if ((!dequeue(&queue[__CS_round])) == stored_elements[__CS_round][i])
			{
				__CS_cs(); if (__CS_ret != 0) return 0;
				goto __CS_ERROR;
				__CS_cs(); if (__CS_ret != 0) return 0;
				__CS_ERROR: __CS_error = 1; __CS_ret = __CS_ret_ERROR; __CS_error_detail = __ERR_ERROR_LABEL_REACHED; return 0;
				__CS_cs(); if (__CS_ret != 0) return 0;
				;

				__CS_cs(); if (__CS_ret != 0) return 0;
			}
			}

			__CS_cs(); if (__CS_ret != 0) return 0;
		}
		__CS_cs(); if (__CS_ret != 0) return 0;
		dequeue_flag[__CS_round] = 0;
		__CS_cs(); if (__CS_ret != 0) return 0;
		enqueue_flag[__CS_round] = 1;
		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_unlock(&m[__CS_round]);
	__CS_cs(); if (__CS_ret != 0) return 0;
	return 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
}
void *main_thread(void *arg)
{
	__CS_pthread_t t1;
	__CS_pthread_t t2;
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_init(&ma[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_mutex_init(&mb[__CS_round], 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	data1[__CS_round] = 10;
	__CS_cs(); if (__CS_ret != 0) return 0;
	data2[__CS_round] = 10;
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t1, 0, thread1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t2, 0, thread2, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(t1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_join(t2, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	if ((data1[__CS_round] == 16) && (data2[__CS_round] == 5))
	{
		__CS_cs(); if (__CS_ret != 0) return 0;
		__CS_ERROR: __CS_error = 1; __CS_ret = __CS_ret_ERROR; return 0;
		__CS_cs(); if (__CS_ret != 0) return 0;
		goto __CS_ERROR;

		__CS_cs(); if (__CS_ret != 0) return 0;
		;
		__CS_cs(); if (__CS_ret != 0) return 0;
	}
	__CS_cs(); if (__CS_ret != 0) return 0;
	}
void *de_allocator()
{
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_lock(&m_busy[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    if (busy[__CS_round] == 0)
    {
        __CS_cs();
        if (__CS_ret != 0) return 0;
        block[__CS_round] = 0;
        __CS_cs();
        if (__CS_ret != 0) return 0;
        if (!(block[__CS_round] == 0))
        {
            __CS_cs();
            if (__CS_ret != 0) return 0;
__CS_ERROR:
            __CS_error = 1;
            __CS_ret = __CS_ret_ERROR;
            return 0;
            __CS_cs();
            if (__CS_ret != 0) return 0;
            goto __CS_ERROR;

        }

        __CS_cs();
        if (__CS_ret != 0) return 0;
        ;
        __CS_cs();
        if (__CS_ret != 0) return 0;
    }
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_unlock(&m_busy[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    return (void *) 0;
    __CS_cs();
    if (__CS_ret != 0) return 0;
}
int stack_empty(void)
{
	__CS_cs(); if (__CS_ret != 0) return 0;
	top[__CS_round] == 0 ? 1 : 0;
	__CS_cs(); if (__CS_ret != 0) return 0;
}
int get_top(void)
{
	__CS_cs(); if (__CS_ret != 0) return 0;
	return top[__CS_round];
	__CS_cs(); if (__CS_ret != 0) return 0;
}
void dec_top(void)
{
	__CS_cs(); if (__CS_ret != 0) return;
	top[__CS_round]--;
	__CS_cs(); if (__CS_ret != 0) return;
}
void inc_top(void)
{
	__CS_cs(); if (__CS_ret != 0) return;
	top[__CS_round]++;
	__CS_cs(); if (__CS_ret != 0) return;
}
Esempio n. 12
0
void *t1(void *arg)
{
    int value;
    int i;
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_lock(&m[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    value = nondet_int();
    __CS_cs();
    if (__CS_ret != 0) return 0;
    if (enqueue(&queue[__CS_round], value))
    {
        __CS_cs();
        if (__CS_ret != 0) return 0;
        goto __CS_ERROR;
        __CS_cs();
        if (__CS_ret != 0) return 0;
    }
    __CS_cs();
    if (__CS_ret != 0) return 0;
    stored_elements[__CS_round][0] = value;
    __CS_cs();
    if (__CS_ret != 0) return 0;
    if (empty(&queue[__CS_round]))
    {
        __CS_cs();
        if (__CS_ret != 0) return 0;
        goto __CS_ERROR;
        __CS_cs();
        if (__CS_ret != 0) return 0;
    }
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_unlock(&m[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    for (i = 0; i < (20 - 1); i++)
    {
        __CS_cs();
        if (__CS_ret != 0) return 0;
        __CS_pthread_mutex_lock(&m[__CS_round]);
        __CS_cs();
        if (__CS_ret != 0) return 0;
        if (enqueue_flag[__CS_round])
        {
            __CS_cs();
            if (__CS_ret != 0) return 0;
            value = nondet_int();
            __CS_cs();
            if (__CS_ret != 0) return 0;
            enqueue(&queue[__CS_round], value);
            __CS_cs();
            if (__CS_ret != 0) return 0;
            stored_elements[__CS_round][i + 1] = value;
            __CS_cs();
            if (__CS_ret != 0) return 0;
            enqueue_flag[__CS_round] = 0;
            __CS_cs();
            if (__CS_ret != 0) return 0;
            dequeue_flag[__CS_round] = 1;
            __CS_cs();
            if (__CS_ret != 0) return 0;
        }
        __CS_cs();
        if (__CS_ret != 0) return 0;
        __CS_pthread_mutex_unlock(&m[__CS_round]);
        __CS_cs();
        if (__CS_ret != 0) return 0;
    }
    __CS_cs();
    if (__CS_ret != 0) return 0;
    return 0;
    __CS_cs();
    if (__CS_ret != 0) return 0;
__CS_ERROR:
    __CS_error = 1;
    __CS_ret = __CS_ret_ERROR;
    return 0;
    __CS_cs();
    if (__CS_ret != 0) return 0;
    ;

    __CS_cs();
    if (__CS_ret != 0) return 0;
}