C++程序  |  94行  |  1.9 KB

/**
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <asm/ioctl.h>
#include <pthread.h>

#define DEBUG
#ifdef DEBUG
#define LOG(fmt, ...) do { \
        printf("%s:%d: "fmt "\n", __FUNCTION__, \
        __LINE__, ##__VA_ARGS__); \
} while (0)
#else
#define LOG(fmt, ...)
#endif

char *infopath = "/sys/kernel/debug/mdp/reg";
int fd1 = -1;
int fd2 = -1;

#define SIZE 2048

void Thread1(void)
{
    int ret;
    char buf[SIZE] = {0};
    fd1 = open(infopath, O_RDWR);
    while (1) {
        ret = read(fd1, buf, SIZE);
        sleep(0.1);
    }
    close(fd1);
}

void Thread2(void)
{
    int i;
    while(1) {
        fd2 = open(infopath, O_RDWR);
        if(fd2 > 0)
        {
            close(fd2);
            fd2 = -1;
        }
        sleep(0.1);
    }
}

void trigger()
{
    int i, ret;
    pthread_t tid_a;
    pthread_t tid_b;

    ret = pthread_create((pthread_t *) &tid_a, NULL, (void *) Thread1, NULL);
    ret = pthread_create((pthread_t *) &tid_b, NULL, (void *) Thread2, NULL);

    i = 200;
    do {
        sleep(1);
    } while(i-- > 0);

    pthread_join(tid_a, NULL);
    pthread_join(tid_b, NULL);
}

int main()
{
    trigger();
    return 0;
}