生产者消费者模型Linux C 实现

生产者消费者问题是同步问题中的一种常见情况,借用一下维基百科的话

生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

信号量配合互斥锁实现

信号量:

信号......

[LeetCode C实现]14. Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]

Output: "fl"

Example 2:

Input: ["dog&q......

[LeetCode C 实现]345. Reverse Vowels of a String

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:

Given s = "hello", return "holle".

Example 2:

Given s = "leetcode", return "leotcede".

Note:

The vowels does not include the letter "y".

......

[LeetCode C 实现]234. Palindrome Linked List

Given a singly linked list, determine if it is a palindrome.

Follow up:

Could you do it in O(n) time and O(1) space?

题目描述比较简单:判断链表中的val组成的数字是否是回文数即形如12321 123321即是回文数。

如果题目中没有O(1) space的要求的话,那么可以把链表的值顺序读出放在数组中,然后进行判断。

一种比较巧妙的思路是:逆序(reverse)后半段,然后比较前后两段的值是否相同。

实现代码:

/**

* Definition for......

[LeetCode C 实现]20. Valid Parentheses

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.

Open brackets must be closed in the ......

[LeetCode C实现] 160. Intersection of Two Linked Lists

Write a program to find the node at which the intersection of two singly linked lists begins.

For example, the following two linked lists:

A: a1 → a2

c1 → c2 → c3

B: b1 → b2 → b3

begin to intersect at node c1.

Notes:

If the two linked lists have no interse......

[LeetCode C 实现]38.Count and Say

The count-and-say sequence is the sequence of integers with the first five terms as following:

1

11

21

1211

111221

1 is read off as "one 1" or 11.

11 is read off as "two 1s" or 21.

21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generat......

一道fork面试题

原文链接一道fork面试题,本文对其内容进行组织优化,新增Unix高级环境编程中对此部分功能的讨论。如对文章内容有任何问题欢迎留言讨论。由于微信订阅号的限制,发布后不能再编辑,因此可以通过阅读原文来获取最新文章内容。如果文章内容存在错误,欢迎发送消息讨论。

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main(void)

{

int i;

for(i=0; i<2; i++){

fork();

printf("-");

}

wait(NU......

[CSAPP]Linux系统中的库

本文学习文章Linux库文件详解的笔记,并对其内容进行组织优化,新增Unix高级环境编程中对共享库的讨论与介绍。如对文章内容有任何问题欢迎留言讨论。由于微信订阅号的限制,发布后不能编辑内容,因此可以通过阅读原文来获取最新文章内容。如果文章内容存在错误,欢迎发送消息讨论。

基本概念

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。

本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a,.lib)和动态库(共享库)(.so,.dll)。

Linux系统中静态库......

[LeetCode C 实现]190. Reverse Bits

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:

If this function is called many times, how would you opti......