Tag: ibm midrange

为C / C ++编写一个宏#include

我在AS / 400上工作,有时候是非POSIX。 我们还需要在UNIX上编译我们的代码。 我们遇到像#include这样简单的问题。 在AS / 400上,我们需要写: #include“* LIBL / H / MYLIB” 在UNIX上,我们需要编写 #include“MYLIB.H” 目前我们在每个C / C ++文件的顶部都有这个(丑陋的)块: #ifndef IS_AS400 #include“* LIBL / H / MYLIB” / *其他人在这里* / #其他 #include“MYLIB.H” / *其他人在这里* / #万一 我们想要一个统一的宏。 这可能吗? 我不知道怎么写。 理想情况下,生成的语法将是: SAFE_INCLUDE( “MYLIB”) 这将在每个平台上正确扩展。 请指教。

C中的非繁忙阻塞队列实现

我试图在C中实现一个队列,导致进程非忙等待,直到队列中有一个元素要消耗。 我尝试过两种不同的尝试来实现这一目标。 我遇到的第一个问题是,如果enqueue / dequeue操作有条件检查边界( if (q-> count == QUEUESIZE)),对sem_wait的调用将立即返回,因为没有其他进程获得锁定。 如果我将条件更改为while (q-> count == QUEUESIZE),我相信消费者进程将“忙等待”,直到生产者进程发布信号量,这不是我实现的目标,并通过测试,我发现消费者进程不会获得锁定并继续。 我认为我很接近,但我似乎无法弄清楚如何解决这些问题。 我考虑过添加条件变量或pthread_mutex,但是在添加额外的复杂性之前想要耗尽信号量选项。 #define QUEUESIZE 48 typedef struct { char q[QUEUESIZE+1][150]; int first; int last; int count; sem_t *lock; } Queue; init_queue(Queue *q, sem_t *l) { q->first = 0; q->last = QUEUESIZE-1; q->count = 0; q->lock = l; } enqueue(Queue *q, […]