void *main_thread(void *arg)
{
    __CS_pthread_t t1;
    __CS_pthread_t t2;
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_assume(inode[__CS_round] == busy[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_init(&m_inode[__CS_round], 0);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_init(&m_busy[__CS_round], 0);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_create(&t1, 0, allocator, 0);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_create(&t2, 0, de_allocator, 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;
    __CS_pthread_mutex_destroy(&m_inode[__CS_round]);
    __CS_cs();
    if (__CS_ret != 0) return 0;
    __CS_pthread_mutex_destroy(&m_busy[__CS_round]);
    __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_assume((0 <= turn[__CS_round]) && (turn[__CS_round] <= 1));
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t1, 0, thr1, 0);
	__CS_cs(); if (__CS_ret != 0) return 0;
	__CS_pthread_create(&t2, 0, thr2, 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;
	}