°ç»„ä¿ç•™çš„æ ‡ç­¾ 余下为需è¦åˆ é™¤çš„æ ‡ç­¾ unset($oldtag[$key]); } } } if (!empty($oldtag)) { $tagids = array(); foreach ($oldtag as $tagid => $tagname) { $tagids[] = $tagid; } well_oldtag_delete($tagids, $tid); } $r = well_tag_process($tid, $fid, $create_tag, $tagarr); return $r; } // 删除标签和绑定的主题 function well_oldtag_delete($tagids, $tid) { $pagesize = count($tagids); $arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize); $delete_tagids = array(); // 删除 $tagids = array(); $n = 0; foreach ($arrlist as $val) { ++$n; if (1 == $val['count']) { // åªæœ‰ä¸€ä¸ªä¸»é¢˜ $delete_tagids[] = $val['tagid']; } else { $tagids[] = $val['tagid']; } } !empty($delete_tagids) and well_tag_delete($delete_tagids); $arlist = well_tag_thread_find_by_tid($tid, 1, $n); if ($arlist) { $ids = array(); foreach ($arlist as $val) $ids[] = $val['id']; well_tag_thread_delete($ids); } !empty($tagids) and well_tag_update($tagids, array('count-' => 1)); } // 标签数æ®å¤„ç† $arr=æ–°æäº¤çš„æ•°ç»„ $tagarr=ä¿ç•™çš„æ—§æ ‡ç­¾ function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array()) { if (empty($tid)) return ''; // 新标签处ç†å…¥åº“ if ($new_tags) { $threadarr = array(); $tagids = array(); $i = 0; $size = 5; $n = count($tagarr); $n = $n > $size ? $size : $size - $n; foreach ($new_tags as $name) { ++$i; $name = trim($name); $name = stripslashes($name); $name = strip_tags($name); $name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', 'ï¼›', '`', '~', '!', 'ï¿¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', 'ã€', '/', '。', '[', ']', 'ã€', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name); $name = htmlspecialchars($name, ENT_QUOTES); if ($name && $i <= $n) { // 查询标签 $read = well_tag_read_name($name); if ($read) { // 存在 count+1 $tagids[] = $read['tagid']; } else { // 入库 $arr = array('name' => $name, 'count' => 1); $tagid = well_tag_create($arr); FALSE === $tagid and message(-1, lang('create_failed')); $read = array('tagid' => $tagid, 'name' => $name); } $tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid); $threadarr[] = $tag_thread; $tagarr[$read['tagid']] = $read['name']; } } !empty($threadarr) and tag_thread_big_insert($threadarr); !empty($tagids) and well_tag_update($tagids, array('count+' => 1)); } $json = empty($tagarr) ? '' : xn_json_encode($tagarr); return $json; } ?>Linux基于阻塞队列和循环队列的生产者消费者模型
ã€Linux】基于阻塞队列和循环队列的生产者消费者模型

ã€Linux】基于阻塞队列和循环队列的生产者消费者模型

什么是生产者消费者模型? 上é¢è¿™å¹…简图就是一个生产者消费者模型,è¦ç†è§£ç”Ÿäº§è€…消费者模型首先è¦ç†è§£ç”Ÿäº§è€…消费者问题,生产者消费者问题,也å«åšæœ‰é™ç¼“冲问题,所谓缓冲也就是上图中生产者和消费者访问的公共资æºä»»åŠ¡é˜Ÿåˆ—ï¼Œè¿™æ˜¯ä¸€ä¸ªå…¸åž‹çš„å¤šçº¿ç¨‹åŒæ­¥é—®é¢˜ï¼Œ

4å°æ—¶å‰20