{"id":22249327,"url":"https://github.com/carlosrocha-dev/42_philosophers","last_synced_at":"2025-03-25T12:14:29.463Z","repository":{"id":190064826,"uuid":"681871355","full_name":"carlosrocha-dev/42_philosophers","owner":"carlosrocha-dev","description":"In this project, you will learn the basics of threading a process. You will see how to create threads and you will discover mutexes.","archived":false,"fork":false,"pushed_at":"2023-08-29T16:07:59.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T11:10:02.465Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carlosrocha-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-23T00:16:30.000Z","updated_at":"2023-08-23T00:48:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"89385086-b99a-482e-91c2-6108b205aaae","html_url":"https://github.com/carlosrocha-dev/42_philosophers","commit_stats":null,"previous_names":["carlosrocha-dev/42_philosophers"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrocha-dev%2F42_philosophers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrocha-dev%2F42_philosophers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrocha-dev%2F42_philosophers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrocha-dev%2F42_philosophers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carlosrocha-dev","download_url":"https://codeload.github.com/carlosrocha-dev/42_philosophers/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245458703,"owners_count":20618697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T06:26:02.801Z","updated_at":"2025-03-25T12:14:29.426Z","avatar_url":"https://github.com/carlosrocha-dev.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![philosophersn](https://github.com/carlosrocha-dev/42_philosophers/assets/3737837/f1851fb8-eeef-4683-8041-4f0a0ea56fcb)\n\n\u003c/div\u003e\n\n\n[![Philosophers CI/CD Workflow](https://github.com/carlosrocha-dev/42_philosophers/actions/workflows/philosophers.yml/badge.svg)](https://github.com/carlosrocha-dev/42_philosophers/actions/workflows/philosophers.yml) ![Static Badge](https://img.shields.io/badge/Philosophers%20(42sp)-v%200.0.1-%20light%20green)\n\n\n# 42_philosophers | 🍽️ 💭 💤\nIn this project, you will learn the basics of threading a process. You will see how to create threads and you will discover mutexes.\n\n ---\n\nVisão Geral\n\nAqui estão as coisas que você precisa saber se deseja ter sucesso nesta tarefa:\n• Um ou mais filósofos estão sentados em uma mesa redonda. Há uma grande tigela de espaguete no centro da mesa.\n• Os filósofos alternam entre comer, pensar ou dormir. Enquanto estão comendo, não estão pensando nem dormindo; enquanto estão pensando, não estão comendo nem dormindo; e, é claro, enquanto estão dormindo, não estão comendo nem pensando.\n• Também há garfos na mesa. Há tantos garfos quanto filósofos.\n• Como servir e comer espaguete com apenas um garfo é muito inconveniente, um filósofo pega os garfos da direita e da esquerda para comer, um em cada mão.\n• Quando um filósofo termina de comer, ele coloca seus garfos de volta na mesa e começa a dormir. Quando acorda, começa a pensar novamente. A simulação para quando um filósofo morre de fome.\n• Cada filósofo precisa comer e nunca deve passar fome.\n• Os filósofos não conversam entre si.\n• Os filósofos não sabem se outro filósofo está prestes a morrer.\n• Não é necessário dizer que os filósofos devem evitar morrer.\n\nRegras Gerais\n\nVocê deve escrever um programa para a parte obrigatória e outro para a parte bônus (caso decida fazer a parte bônus). Ambos devem obedecer às seguintes regras:\n\n• Variáveis globais são proibidas!\n\n• Seu(s) programa(s) deve(m) receber os seguintes argumentos:\nnúmero_de_filósofos tempo_para_morrer tempo_para_comer tempo_para_dormir [número_de_vezes_que_cada_filósofo_deve_comer]\n◦ número_de_filósofos: O número de filósofos e também o número de garfos.\n◦ tempo_para_morrer (em milissegundos): Se um filósofo não começar a comer após tempo_para_morrer milissegundos desde o início de sua última refeição ou o início da simulação, ele morre.\n◦ tempo_para_comer (em milissegundos): O tempo que um filósofo leva para comer. Durante esse tempo, eles precisarão segurar dois garfos.\n◦ tempo_para_dormir (em milissegundos): O tempo que um filósofo passará dormindo.\n◦ número_de_vezes_que_cada_filósofo_deve_comer (argumento opcional): Se todos os filósofos tiverem comido pelo menos número_de_vezes_que_cada_filósofo_deve_comer vezes, a simulação para. Se não for especificado, a simulação para quando um filósofo morre.\n\n• Cada filósofo tem um número de 1 a número_de_filósofos.\n\n• O filósofo número 1 está ao lado do filósofo número número_de_filósofos. Qualquer outro filósofo número N está entre o filósofo número N - 1 e o filósofo número N + 1.\n\nSobre os registros do seu programa:\n• Qualquer mudança de estado de um filósofo deve ser formatada da seguinte maneira:\n◦ timestamp_em_ms X pegou um garfo ◦ timestamp_em_ms X está comendo\n◦ timestamp_em_ms X está dormindo ◦ timestamp_em_ms X está pensando\n◦ timestamp_em_ms X morreu Substitua timestamp_em_ms pelo timestamp atual em milissegundos e X pelo número do filósofo.\n\n• Uma mensagem de estado exibida não deve ser misturada com outra mensagem.\n• Uma mensagem anunciando a morte de um filósofo deve ser exibida em no máximo 10 ms após a morte real do filósofo.\n• Novamente, os filósofos devem evitar morrer!\n\nObrigatório\n\nAs regras específicas para a parte obrigatória são:\n• Cada filósofo deve ser uma thread.\n• Há um garfo entre cada par de filósofos. Portanto, se houver vários filósofos, cada filósofo tem um garfo ao seu lado esquerdo e um garfo ao seu lado direito. Se houver apenas um filósofo, deve haver apenas um garfo na mesa.\n• Para evitar que os filósofos dupliquem os garfos, você deve proteger o estado dos garfos com um mutex para cada um deles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlosrocha-dev%2F42_philosophers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarlosrocha-dev%2F42_philosophers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlosrocha-dev%2F42_philosophers/lists"}