Find Jobs
Hire Freelancers

Producer-Consumer Problem using processes instead of threads

$10-30 USD

ที่ทำเสร็จแล้ว
โพสต์ ประมาณ 2 ปีที่ผ่านมา

$10-30 USD

ชำระเงินเมื่อส่งงาน
Write a solution for the producer/consumer problem using processes instead of threads. Refer to the solution worked out in the demo and make sure you fully understand what is going on there before beginning this one (source file is attached). Submit code and a text file called README containing instructions for building and running your programs. Descriptions of functions listed below in bold can be found in the man pages (e.g. man fork), though sometimes you may need to specify the correct section of the manual to get the correct page (e.g. man 3 printf). Approach the problem in phases and incrementally grow your solution: start with process creation (e.g. if there's one producer and one consumer specified, one process -the parent- will fork two others, a producer program and a consumer program), then move on to shared memory stuff (making sure that the children can read what the parent is placing in there), and only then finish up the producer/consumer portion (pretty much the same as the threaded version). Use the following functions for process creation, etc: fork - create a new process execlp - replace current process image with a new process image (i.e. execute a file) waitpid - allows parent to wait for a child with specified pid Use the following functions for sharing stuff between processes: shm_open - create a named chunk of shared memory ftruncate - to change the size of the named chunk of shared memory mmap - to map the shared memory chunk into current process' address space Example: Let's say you want to share a struct, like: typedef struct shared{ int some_int_to_share; int some_other_int_to_share; ... }shared; In the parent process (the one that starts everything): int fd = shm_open("prodconshare", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); ftruncate(fd, sizeof(shared)); shared* sharedstruct = mmap(NULL, sizeof(shared), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); In the child process it is similar, but the child process would not create the named chunk if it doesn't exist and the child process has no need to resize the chunk (so, no ftruncate): int fd = shm_open("prodconshare", O_RDWR, S_IRUSR | S_IWUSR); shared* sharedstruct = mmap(NULL, sizeof(shared), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); Use the following functions to synchronize the producers and consumers: sem_init - initialize a semaphore sem_wait - decrement a semaphore sem_post - increment a semaphore (remember that decrementing a semaphore below zero will put the calling process to sleep and sem_post will have to be called by another process to wake it up. You might think about stuffing some semaphores into the shared memory, using a struct to arrange the shared memory chunk's contents.) The producers can exit when they've produced their whole string, e.g. "hello world". For simplicity, the consumers may run indefinitely and be terminated with ctrl+c. Other useful functions: malloc - allocate memory sizeof - get the size of things printf - print stuff perror - print error stuff
รหัสโปรเจกต์: 32744090

เกี่ยวกับโปรเจกต์

1 ข้อเสนอ
โปรเจกต์ระยะไกล
ใช้งานอยู่ 2 ปีที่ผ่านมา

กำลังมองหาการสร้างรายได้ใช่ไหม?

ประโยชน์ของการประมูลกับ Freelancer

กำหนดงบประมาณและกรอบเวลาของคุณ
รับเงินจากการงานของคุณ
อธิบายข้อเสนอของคุณในภาพรวม
ลงทะเบียนและเสนอราคาฟรี
หมอบหมายให้:
รูปอวาตาร์ของผู้ใช้
Hi, there. I have read your job description carefully, and I think I can help you. As an expert of C/C++, I can complete your project perfectly. Please have a look at my profile reviews. Hope for your reply. Thanks.
$50 USD ใน 1 วัน
5.0 (6 รีวิว)
3.3
3.3

เกี่ยวกับลูกค้า

ปักธงของ UNITED STATES
littleton, United States
5.0
2
ยืนยันวิธีการชำระเงินแล้ว
เป็นสมาชิกตั้งแต่ ต.ค. 11, 2019

การยืนยันลูกค้า

ขอบคุณ! เราได้ส่งลิงก์สำหรับเครดิตฟรีให้คุณทางอีเมลแล้ว
เกิดข้อผิดพลาดขณะส่งอีเมลของคุณ กรุณาลองอีกครั้ง
โลโก้ Freelancer Thailand / ภาษาไทย ช่วยเหลือและสนับสนุน FreelancerประเภทโปรเจคการประกวดFreelancerองค์กรแพ็กเกจสมาชิกโครงการ Freelancer ชั้นแนวหน้าการจัดการโปรเจคงานในพื้นที่Photo Anywhereหน้าจัดแสดงผลงานAPI สำหรับนักพัฒนาได้รับการยืนยันDesktop App เกี่ยวกับเกี่ยวกับเราวิธีใช้งานความปลอดภัยนักลงทุนแผนผังเว็บไซต์เรื่องราวข่าวออกสื่อทีมรางวัลข่าวประชาสัมพันธ์ร่วมงานกับเรา ข้อกำหนดนโยบายความเป็นส่วนตัวข้อกำหนดและเงื่อนไขนโยบายลิขสิทธิ์ข้อพึงปฏิบัติค่าธรรมเนียมและค่าบริการหุ้นส่วนEscrow.comLoadshiftWarrior Forum แอปโลโก้ Apple App Store โลโก้ Google Play
ไม่สามารถคัดลอกไปยังคลิปบอร์ดได้ โปรดลองอีกครั้งหลังปรับเปลี่ยนการอนุญาต
คัดลอกไปยังคลิปบอร์ดแล้ว
ผู้ใช้ที่ลงทะเบียน งานที่มีการโพสต์ทั้งหมด
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
กำลังโหลดตัวอย่าง
ได้รับอนุญาตสำหรับตำแหน่งทางภูมิศาสตร์
เซสชั่นการเข้าสู่ระบบของคุณหมดอายุและคุณได้ออกจากระบบแล้ว กรุณาเข้าสู่ระบบอีกครั้ง