skynet 源码阅读--3--codenote

  

void 
skynet_mq_push(struct message_queue *q, struct skynet_message *message) {
	assert(message);
	SPIN_LOCK(q)

	q->queue[q->tail] = *message; /** 为什么还是message ***/
	if (++ q->tail >= q->cap) {
		q->tail = 0;
	}

	if (q->head == q->tail) {
		expand_queue(q);
	}

	if (q->in_global == 0) {
		q->in_global = MQ_IN_GLOBAL;
		skynet_globalmq_push(q);
	}
	
	SPIN_UNLOCK(q)
}

  没看懂

q->queue[q->tail] = *message;

后来反应过来,是一级指针,还是二级指针。
分配的空间也可以看出
	q->queue = skynet_malloc(sizeof(struct skynet_message) * q->cap);

  

posted @ 2018-11-22 09:41  ashen~  阅读(95)  评论(0)    收藏  举报